- ベストアンサー
SQLで文字設定に関する問題が発生しました
- 自身の環境の文字設定が把握できておらず問題が発生しました。
- SQLを投げて取得したデータを表示させようとした際、問題が発生しました。
- 文字設定の問題が原因であり、具体的な解決策をお教えください。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
$row = mysql_num_rows($result); $count = 1; for($i=0;$i<$row;$i++) { $array = mysql_fetch_array($result); $tmp_kenmei[$count] = mb_convert_encoding($array[0],"SJIS","UTF-8"); echo mb_convert_encoding($array[0],"SJIS","UTF-8"); $count++; } のところを $count = 1; while($array = mysql_fetch_array($res,MYSQL_ASSOC)){ echo $count.":".$array["kenmei"]."<br>"; $count++; } としてみてください それでもだめなら echo のところを print_r($array); に変えてみてください 条件なし、半角文字のみ検索、全角文字検索の3パターン試してみてください
その他の回答 (4)
- yambejp
- ベストアンサー率51% (3827/7415)
>検索条件を追加した場合のみ、以下の記述は表示されませんでした、、、 検索条件を追加した状態で $row = mysql_num_rows($result); の後ろに print $row."件<br>"; とすると1以上の件数がヒットしていますか?
補足
yambejp様、何度もご回答ありがとうございます。 print $row."件<br>"; を実行したところ、やはり該当件数分○件と表示されます。 レコードは取得できていますが、データだけが表示できません。 原因が全くわからず、、、
- yambejp
- ベストアンサー率51% (3827/7415)
>英数文字だけでも検索はヒットし、レコードも取得できますが、 >表示部分で空白となってしまいます。 この部分だけでいえば $array = mysql_fetch_array($res,MYSQL_ASSOC); でうけたら print $array["kenmei"]; してみてください
お礼
yambejp様、ご回答ありがとうございます。 検索条件を追加した場合のみ、以下の記述は表示されませんでした、、、 print $array["kenmei"]; ↑ 何もでてきません、、、
- agunuz
- ベストアンサー率65% (288/438)
>$tmp_kenmei = mb_convert_encoding($tmp_kenmei,"UTF-8","SJIS"); ということは、$tmp_kenmei はutf-8 になっているんですよね?また >echo mb_convert_encoding($array[0],"SJIS","UTF-8"); ですから、utf-8で取得してsjisに変換」して表示するんですよね? であれば、 >mysql_query("set names sjis"); は誤りです。そもそもmysql_queryで文字セット指定するなんて論外なので mysql_set_charset('utf8'); としてください。 というか、phpスクリプトの文字セットに合わせて mysql_set_charset('sjis'); としてmb_convert_encodingを省いた方が手っ取り早いですけどね。何故わざわざ文字セットを変更して使っているのかが謎です。 なお、すでに指摘がありますが非推奨のmysql関数を使うべきではありません。PDOで書き直すことを強く推奨します(PDOでMySQLを扱う場合はDSNで文字セットを指定します)。 #個人的には、そもそもphpスクリプトでsjisを使うのがダメだと思う。 #utf-8で書かない理由を知りたい。
お礼
agunuz様、ご回答ありがとうございます。 文字設定等を把握していないままプログラムを組んでしまっている ようです。 申し訳ありません。 mysql_set_charset('utf8'); ご指摘頂いたと通りにしてみましたが、やはり状況は変わりませんでした、、、
- yambejp
- ベストアンサー率51% (3827/7415)
まず、英数文字だけの検索でもマッチしないかを確認するところからでしょうね にしても、なにを参考にしたのかわかりませんが かなりダメダメな感じがするソースですね ・mysql関数つかってる ・mysql_fetch_arrayに第二引数を指定していない ・utf,sjisの相互変換がへん (DBはutfで保管?なのにsjisを指定?) ・query処理でset names投げてる ・whileではなくforでまわしてデータをとっている (別にポリシーをもってやるならそれでも構いませんが)
お礼
yambejp様、ご回答ありがとうございます。 何もわかっておらず申し訳ありません、、、 英数文字だけでも検索はヒットし、レコードも取得できますが、 表示部分で空白となってしまいます。 mb_convert_encoding($array[0],"SJIS","UTF-8"); ここまではうまく取れてきていますが、セットできていないようです。 教えて下さい。
お礼
yambejp様、何度もありがとうございます。 ようやく表示されるようになりました! 本当にありがとうございました!!