[PHP-users 1561] addslashes関数でエンコード

php-users@php.gr.jp php-users@php.gr.jp
Mon, 27 Aug 2001 22:18:24 +0900


たけです。ご無沙汰しています。

環境
PHP4.05+jstring
MySQL 3.23.39
magic_quotes_gpc=off
magic_quotes_runtime=off
magic_quotes_sybase=off

以下のようにaddslashes関数でエンコードしてSQL文を作って
データベースにデータをしまっているのですが、、

$amei="椎名林檎";
$mmei="本能";
とした場合

$en_amei=addslashes($amei);
$en_mmei=addslashes($mmei);
$query="INSERT INTO  melo_table (amei,mmei) VALUES('$en_amei','$en_mmei')";
$result = mysql_query($query);

つまり
$query="INSERT INTO  melo_table (amei,mmei) VALUES('椎名林檎','本能\')"
となってしまって1064: You have an error in your SQL syntax near ・・・・
のエラーになってしまいます。

'本能\' の部分で\で'が無効化されてしまっているからだと思うのですが、

私の今までの認識では、addslashesは
$amei="B'z";
$en_amei=addslashes($amei);
つまり
$en_amei="B\'z";
のようにSQL文で'
$query="INSERT INTO  melo_table (amei,mmei) VALUES('B'z','$en_mmei')";
のようにならないようにする為の関数だと思っていたのですが、

どのような場合に「本能\」のように、エンコード後の最後に\がついてしまうのでしょうか?
このような場合を考慮する為にはどのように対処したらよいのでしょうか?

ご教授いただけないでしょうか?
よろしくお願いいたします



J-SKY研究所
http://www.j-ken.ne.jp
j-ken/take <take@j-ken.com>