プロが教える店舗&オフィスのセキュリティ対策術

教えて下さい。

自身の環境の文字設定が把握できておらず申し訳ありません。

以下のようにSQLを投げ、取得したデータを表示させようとしていますが、取得はできている
ものの $tmp_kenmei を表示させようとしたところ、表示されません。

echo で中身を確認した際には、問題なくセットされていました。

また、where句で条件を指定しない場合は、問題なく取得できます。

文字設定か何かの問題かと思われますが、、、

何が原因でしょうか、、、教えて下さい。

よろしくお願いします。

《内容》

$tmp_kenmei = mb_convert_encoding($tmp_kenmei,"UTF-8","SJIS");

$con = mysql_connect("localhost", "root", "999999"); //データベースへ接続する
if (!$con) {
die('接続できませんでした: ' . mysql_error());
}

$sql = "select kenmei from tbl_AAA where kenmei like '%" . $tmp_kenmei . "%'";


if (!mysql_select_db('db', $con)) {
echo 'Could not select database';
exit;
}

$result = mysql_query($sql,$con);
mysql_query("set names sjis");

if (!$result) {
echo "DB Error, could not query the database\n";
echo 'MySQL Error: ' . mysql_error();
exit;
}

$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++;
}

A 回答 (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パターン試してみてください
    • good
    • 0
この回答へのお礼

yambejp様、何度もありがとうございます。

ようやく表示されるようになりました!

本当にありがとうございました!!

お礼日時:2014/05/09 16:43

>検索条件を追加した場合のみ、以下の記述は表示されませんでした、、、



検索条件を追加した状態で

$row = mysql_num_rows($result);

の後ろに
print $row."件<br>";

とすると1以上の件数がヒットしていますか?

この回答への補足

yambejp様、何度もご回答ありがとうございます。

print $row."件<br>";

を実行したところ、やはり該当件数分○件と表示されます。

レコードは取得できていますが、データだけが表示できません。

原因が全くわからず、、、

補足日時:2014/05/09 15:26
    • good
    • 0

>英数文字だけでも検索はヒットし、レコードも取得できますが、


>表示部分で空白となってしまいます。

この部分だけでいえば

$array = mysql_fetch_array($res,MYSQL_ASSOC);
でうけたら
print $array["kenmei"];
してみてください
    • good
    • 0
この回答へのお礼

yambejp様、ご回答ありがとうございます。

検索条件を追加した場合のみ、以下の記述は表示されませんでした、、、

print $array["kenmei"];

↑ 何もでてきません、、、

お礼日時:2014/05/09 13:37

>$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で書かない理由を知りたい。
    • good
    • 0
この回答へのお礼

agunuz様、ご回答ありがとうございます。

文字設定等を把握していないままプログラムを組んでしまっている
ようです。

申し訳ありません。

mysql_set_charset('utf8');

ご指摘頂いたと通りにしてみましたが、やはり状況は変わりませんでした、、、

お礼日時:2014/05/09 13:35

まず、英数文字だけの検索でもマッチしないかを確認するところからでしょうね



にしても、なにを参考にしたのかわかりませんが
かなりダメダメな感じがするソースですね

・mysql関数つかってる
・mysql_fetch_arrayに第二引数を指定していない
・utf,sjisの相互変換がへん
(DBはutfで保管?なのにsjisを指定?)
・query処理でset names投げてる
・whileではなくforでまわしてデータをとっている
(別にポリシーをもってやるならそれでも構いませんが)
    • good
    • 0
この回答へのお礼

yambejp様、ご回答ありがとうございます。

何もわかっておらず申し訳ありません、、、

英数文字だけでも検索はヒットし、レコードも取得できますが、
表示部分で空白となってしまいます。

mb_convert_encoding($array[0],"SJIS","UTF-8");

ここまではうまく取れてきていますが、セットできていないようです。

教えて下さい。

お礼日時:2014/05/09 10:47

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!