2013-11-23 72 views
0

我剛剛得知我有magic_quotes_gpc(很讓我懊惱)。我把它關掉了。mysqli_real_escape_string不能正常工作

我的數據庫連接在此查詢之前完成。我有以下內容:

$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語法錯誤)。我以爲我理解了這個概念,但我一定錯過了一些東西。有人能解釋我做錯了什麼嗎?

UPDATE

錯誤吐出由MySQL: 你有你的SQL語法錯誤;檢查對應於你的MySQL服務器版本使用附近的正確語法手冊的她說了什麼「,在1號線

更新#2 這裏的回顯查詢:

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

有什麼語法錯誤? –

+0

同時顯示最終的SQL查詢字符串。 – mario

+0

@ThorpeObazee我更新了我原來的帖子。 – thebarless

回答

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

+0

「ssi」是做什麼的? – thebarless

+1

它指定參數的類型是字符串,字符串和整數。從文檔中不清楚嗎? – Barmar