2017-04-12 116 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

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