mysqli_real_escape_string无效

时间:2013-11-23 06:09:22

标签: php mysqli

我刚刚知道我有魔术点数(很多让我很懊恼)。我关掉了。

我的数据库连接是在此查询之前建立的。我有以下内容:

$subject = mysqli_real_escape_string($link, $_POST["subject"]);
$body = mysqli_real_escape_string($link, $_POST["body"]);
$id = mysqli_real_escape_string($link, $_POST["id"]);


mysqli_query($link, "UPDATE press SET press_title = '$subject', press_release = '$body' WHERE press_id = '$id'") or die( mysqli_error($link) );

使用魔术引号,这很好用。一旦我将其关闭,单引号就会堵塞工作(引用时出现MySQL语法错误)。我以为我理解了这个概念但我必须遗漏一些东西。有人可以解释我做错了吗?

更新

MySQL吐出的错误:     你的SQL语法有错误;检查与您的MySQL服务器版本相对应的手册,以获得正确的语法,以便在第1行的“她所说的”附近使用

更新#2 这是echo'd查询:

UPDATE press SET press_title = \'That\'s what she said\', press_release = \'That\'s what she said again!\' WHERE press_id = \'513\'

1 个答案:

答案 0 :(得分:1)

使用参数化查询:

$stmt = mysqli_prepare($link, "UPDATE press SET press_title = ?, press_release = ? WHERE press_id = ?") or die (mysqli_error($link)); 
mysqli_stmt_bind_param($stmt, "ssi", $_POST['subject'], $_POST['body'], $_POST['id']);
mysqli_stmt_execute($stmt);

Manual