SQL“UPDATE”给出错误

时间:2018-06-17 09:01:54

标签: php sql mysqli

我在程序化PHP中创建了一个简单的博客系统,用户可以在其中创建新帖子,查看现有帖子,因此它是一个CRUD系统。

所以这是我的代码:

  if(isset($_POST['submit'])) {
  $titel = $_POST['titel'];
  $kortbeskrivelse = $_POST['kortbeskrivelse'];
  $skrib = $_POST['skrib'];
  $post = $_POST['post'];

  $update = "UPDATE posts SET ";
  $update .= "title = '{$titel}', ";
  $update .= "kortbe = '{$korbeskrivelse}', ";
  $update .= "author = '{$skrib}', ";
  $update .= "beskrivelse = '{$post}', ";
  $update .= "WHERE id=$pid LIMIT 1";

  $updateresult = mysqli_query($conn, $update);

  if (mysqli_query($conn, $updateresult)) {
    echo "New record created successfully";
} else {
    echo "Error: " . $updateresult . "<br>" . mysqli_error($conn);
} 

}

因此,为了解释查询,我正在使用从POST表单传递的变量来更新帖子。

$ pid变量,用于确保它正在更新正确的帖子(我在sql查询之前声明了它)

我没有收到任何PHP错误,并且连接效果很好。 这是SQL错误:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE id= LIMIT 1' at line 1

所以这有点令人困惑,我担心这是一个错误40(人为错误:D)

我知道它非常不安全,它也用于展示注射等。

我希望有人可以帮助我!

提前感谢!

4 个答案:

答案 0 :(得分:0)

此行$update .= "beskrivelse = '{$post}', ";中有一个逗号。尝试删除它:

$update .= "beskrivelse = '{$post}' ";

答案 1 :(得分:0)

$update = "UPDATE posts SET ";
$update .= "title = '$titel', ";
$update .= "kortbe = '$korbeskrivelse', ";
$update .= "author = '$skrib', ";
$update .= "beskrivelse = '$_POST[beskrivelse]' ";
$update .= "WHERE id=$pid LIMIT 1";

更改您的代码,不要在查询中使用{}括号,并从上次$ update中删除','并在'$ pid'中加入一些值

答案 2 :(得分:0)

试试这个:

$update .= "WHERE id={$pid} LIMIT 1";

带有$ pid的文本格式不会返回&#34; PID&#34;价值,但文字&#39; $ pid&#39;。

答案 3 :(得分:0)

  

您的MySQL服务器版本,以便在第1行的“WHERE id = LIMIT 1”附近使用正确的语法

仔细观察,你会注意到id==操作没有右值。出于某种原因,您的$pid为空。代码段不会显示$pid的来源。

除此之外,在最后一栏之后你也有一个逗号。

$update = "UPDATE posts SET ";
$update .= "title = '{$titel}', ";
$update .= "kortbe = '{$korbeskrivelse}', ";
$update .= "author = '{$skrib}', ";
$update .= "beskrivelse = '{$post}' "; // removed comma
$update .= "WHERE id=$pid LIMIT 1";

此外,您构建查询的方式,您的应用程序是易受攻击的。阅读"SQL Injection"并修复代码以使用参数化查询而不是字符串连接。