mysql_escape_stringの罠

仕事でずいぶん前に作られたPHPをいじっていました。

DBの型も、PHPの入力チェックも通っているのに
なぜかSQLエラーが出ていたので調べてみました。

 
諸悪の根源はPHPファイルがSJISだったことであるようです。

エラーを出している部分は以下の部分でした。

$hoge = mysql_escape_string($hoge);

こうするとPHPファイル自体がSJISの場合、
$hogeに¥(円マーク)が入ってしまうケースがあり、
SQLエラーが起こっていました。

 
そこで以下に変更しました。

mysql_set_charset(‘sjis’);
$hoge = mysql_real_escape_string($hoge);

mysql_real_escape_stringは
mysql_set_charsetの文字コードを見て$hogeを変換してくれるそうです。

 
ちゃんとした作りにしようと強く実感しました(苦笑)
 

コメント

タイトルとURLをコピーしました