問題是你的$ _POST ['desc']包含一個撇號。我建議你在所有參數上使用函數mysqli_real_escape_string(doc:http://be2.php.net/manual/en/mysqli.real-escape-string.php)。
另外,嘗試用反引號逃避所有行和表,以避免保留字創建錯誤。
您所查詢的例子看起來像這樣與他們同在
"UPDATE `articles` SET `title` = '".mysqli::real_escape_string($_POST['title'])."', `contents` = '".mysqli::real_escape_string($_POST['cont'])."', `category` = '".mysqli::real_escape_string($_POST['cat'])."', `desc` = '".mysqli::real_escape_string($_POST['desc'])."' WHERE `stitle` = '".mysqli::real_escape_string($_POST['stitle'])."'";
如果您正在使用的程序的編程風格調用mysqli的功能,使用方法:
"UPDATE `articles` SET `title` = '".mysqli_real_escape_string($link, $_POST['title'])."', `contents` = '".mysqli_real_escape_string($link, $_POST['cont'])."', `category` = '".mysqli_real_escape_string($link, $_POST['cat'])."', `desc` = '".mysqli_real_escape_string($link, $_POST['desc'])."' WHERE `stitle` = '".mysqli_real_escape_string($link, $_POST['stitle'])."'";
(Obviosuly,替換變量$鏈接當你做mysqli_connect()時初始化)
使用這些函數,你可以避免這些錯誤,並且還有很多SQL漏洞。如果變量包含整數,則不需要,但是,您總是需要檢查傳遞給SQL引擎的數據以避免問題。
是一種很好的做法,可以進行一些檢查,例如,測試誰的整數變量包含整數,或使用mysqli :: real_escape_string進行轉義。而且,如果輸入數據中有某些內容不正確,請暫停該進程並且不要求SQL查詢。
問題可能出現在您的$ _POST ['cat']'值中。您應該使用帶有綁定參數的準備語句 – Phil
感謝您的迴應。我會試一試。 – jcvamp
沒有。沒有工作。我將它改爲'$ tit = $ _ POST ['title']; $ stit = $ _ POST ['stitle']; $ cont = $ _ POST ['cont']; $ desc = $ _ POST ['desc']; $ cat = $ _ POST ['cat'];'和 'UPDATE articles SET title ='「。$ tit。」',contents ='「。$ cont。」',category ='「。$ cat。」 ',desc ='「。$ desc。」'WHERE stitle ='「。$ stit。」';'同樣的錯誤。 – jcvamp