addslashes()の後にmysql DBにスラッシュを挿入する方法

<?php
$link = mysql_connect('localhost', 'root', 'root')
    OR die(mysql_error());
mysql_select_db('autos') or die('no db');
$bookName = "O'relly";
$user = addslashes($bookName);

$query = "INSERT INTO makes VALUES(null, '{$user}')";
mysql_query($query) OR die(mysql_error());

var_dump($user);

?>

変数出力は文字列 'O \' relly '(長さ= 8)です。 しかし、 'O'relly'として保存されたDBでは

DBに挿入する前に、MySQLのストリップスラッシュのように見えます。それは本当です?

0
addslashes のポイントは何だったと思いましたか?データベースに違いがなければ、無意味になります。それにもかかわらず、それは十分な保護ではないので、まだ無意味です。手動エスケープを使用する場合は、 mysql_real_escape_string がありますが、実際にはあなたに束縛されているパラメタを与えるものを使用する必要があります。
追加された 著者 Quentin,

1 答え

SQLはバックスラッシュを取り除かず、コマンドを解析するときに正しく解釈します。スラッシュがなければ、SQLは

INSERT INTO makes VALUES(null, 'O'relly')

文字列 'O'の後に構文エラーが続きます。 (あるいは、悪いことに、これは恐怖の "SQLインジェクション攻撃"に悪用される可能性があります)。

要するに、これは意図したとおりに動作しています。

1
追加された
はい、それはそれが意味することです。どうすれば をデータベースに追加したいのかを教えてください。それを行う方法を教えてください。
追加された 著者 alexis,
[OK]を、私が 'O \' relly 'をDBに追加するとO'rellyになります
追加された 著者 Yaroslav,
PHP - 日本のコミュニティ [ja]
PHP - 日本のコミュニティ [ja]
4 参加者の

このグループではPHPについて話します。 パートナー:kotaeta.com