2017-04-12 142 views
1

我有這個mySQLi代碼,它給了我錯誤...一直盯着它一個小時,我不明白爲什麼它錯了。請幫助!mySQLi PHP解析錯誤:語法錯誤

解析錯誤:語法錯誤,意想不到 ''(T_ENCAPSED_AND_WHITESPACE),在C期待標識符(T_STRING)或可變(T_VARIABLE)或數字(T_NUM_STRING):行\的appserv \ WWW \ myMovieDB \ UpdateMovie.php 24

$sql = "UPDATE movie SET `name` = "$_POST[title]", `release` = "$_POST[movie_release]", synopsis = "$_POST[synopsis]" 
WHERE `name = '$_POST['movie_to_change']'"; 
+0

而不是試圖修補這個混亂,爲什麼不使用準備的語句,而是使用mysqli反正 – Ghost

+0

你的哪裏部分是錯誤的。它應該是WHERE'name' =「'。$ _ POST ['movie_to_change']。'」 –

+0

@Kent W將您的查詢改爲 $ sql =「UPDATE movie SET'name' =」。$ _ POST [「title」 ]「,'release' =」。$ _ POST [「movie_release」]。「,synopsis =」。$ _ POST [「synopsis」]。「 WHERE'name ='」。$ _ POST [「movie_to_change」]。「 「「; –

回答

3

不要直接在您的查詢中使用$_POST它可能會導致SQL注入。你必須使用mysqli_real_escape_string(mysqli $link , string $escapestr)消毒變量一樣:

$title = mysqli_real_escape_string($connection_link ,$_POST['title']); 
$movie_release = mysqli_real_escape_string($connection_link ,$_POST['movie_release']); 
$synopsis = mysqli_real_escape_string($connection_link ,$_POST['synopsis']); 
$movie_to_change = mysqli_real_escape_string($connection_link ,$_POST['movie_to_change']); 

然後你的查詢將是:()

$sql = "UPDATE movie SET 
      `name` = '$title', 
      `release` = '$movie_release', 
      `synopsis` = '$synopsis' 
      WHERE 
      `name` = '$movie_to_change'"; 

您可以直接使用適當連接運算符,即查詢裏面的$_POST可變週期。但是,如果您像查詢一樣將查詢內部的$_POST變量與查詢內部的直接訪問分離開來,將會阻止您發生串聯混淆。

0

你缺少逗號

$sql = "UPDATE movie SET name = '".$_POST['title']."', release = 
     '".$_POST['movie_release']."', synopsis = '".$_POST['synopsis']."' 
     WHERE name = '".$_POST['movie_to_change'].'"; 
+0

我認爲你的答案可以使用改進,沒有丟失的逗號。即使你的答案會爆炸。 – Augwa

+0

怎麼能證明它的錯? '$ _POST ['title']'檢查它是否正確,標題沒有嵌入逗號。同時聲明的形成也是錯誤的 –

+0

您添加了連接和引號,以便您關於逗號的聲明具有誤導性。逗號也在他的代碼中。去運行這行代碼,你會發現它不起作用,字符串沒有關閉。 – Augwa

0

您還沒有作出適當的SQL字符串。請嘗試以下字符串

$sql = "UPDATE movie SET `name` = ".$_POST['title'].", `release` = ".$_POST['movie_release'].", `synopsis` = ".$_POST['synopsis']." 
WHERE `name` = ".$_POST['movie_to_change']; 
+0

這隻能解決問題的一部分,除非他通過引號,否則將會失敗 – Augwa

+0

不要在沒有任何理由的情況下投票回答如果你知道原因給出答案 –