【发布时间】:2020-05-12 17:09:34
【问题描述】:
这是我在 Stack Overflow 上的第一篇文章。我知道这个问题已经被问过很多次了。我经历了很多答案,尝试了所有答案(显然正确的方法除外)并且不知道该尝试什么了。
我有一个 SQL 表,其中每一行都有一个“编辑”按钮。单击它时,我将所选行的 id 传递给edit.php。在那里,我得到它并使用表单中的用户输入根据 id 更新给定的行。第一列是 id,设置为AUTO_INCREMENT。
顺便说一句,无论我使用WHERE id=$id"; 还是WHERE id='$id'";,我都会遇到同样的错误
我认为最接近正确方法的代码如下,并在代码下方生成错误消息:
<html>
<title>
Video Archiv - New
</title>
<body>
<?php
include("connect.php");
$id=$_GET['id'];
echo "Details von Video #$id editieren:<br /><br />";
if(isset($_POST['update']))
{
$sql = "UPDATE VideoArchiv
SET ('".$_POST["titel"]."','".$_POST["schauspieler"]."')
WHERE id=$id";
$result = mysqli_query($connect,$sql);
if (mysqli_query($connect,$sql) === TRUE)
{
echo "Record updated successfully";
}
else
{
echo "Error updating record: " . $connect->error;
}
}
?>
<form action="edit.php" method="post">
<label> Titel:</label><br/>
<input type="text" name="titel" required><br/>
<label>Schauspieler</label><br/>
<input type="text" name="schauspieler" required><br/>
<br />
<button type="submit" name="update">Speichern</button>
</form>
<?php
include("back.php");
?>
</body>
</html>
错误信息:
错误更新记录:您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 2 行的 '('a','d') WHERE id=9' 附近使用正确的语法
非常感谢您的帮助,并对重复的问题感到抱歉,但我真的找不到解决方案,非常绝望。
更新:
下面的代码给出了这个错误:
致命错误:未捕获的错误:在 /homepages/25/d72758610/htdocs/multimedia/edit.php:30 中调用 bool 上的成员函数 bind_param() 堆栈跟踪:在 /homepages/25 中抛出 #0 {main} /d72758610/htdocs/multimedia/edit.php 第 30 行
<html>
<title>
Video Archiv - New
</title>
<body>
<?php
include("connect.php");
$id=$_GET['id'];
$title = $_POST["titel"];
$schauspieler = $_POST["schauspieler"];
if(empty($title))
{
echo "error";
}
elseif(empty($schauspieler))
{
echo "error";
}
else
{
$sql = "UPDATE users SET title=?, schauspieler=? WHERE id=?";
$stmt= $connect->prepare($sql);
$stmt->bind_param("ssi", $title, $schauspieler, $id);
if($stmt->execute())
{
echo "Succes";
}
else
{
echo "something went wromg";
}
}
?>
<form action="edit.php" method="post">
<label> Titel:</label><br/>
<input type="text" name="titel" required><br/>
<label>Schauspieler</label><br/>
<input type="text" name="schauspieler" required><br/>
<br />
<button type="submit" name="update">Speichern</button>
</form>
<?php
include("back.php");
?>
</body>
</html>
【问题讨论】:
-
失败的是 SET,而不是 WHERE。
-
我认为你的
where不是问题 - 看起来这是你正在做你的set的事实,就像你做insertdev.mysql.com/doc/refman/5.7/en/set-variable.html 一样 - 请注意 SQL 注入代码中的漏洞 -
相关:警告:您的代码容易受到 SQL 注入攻击。您应该使用参数化查询和准备好的语句来帮助防止攻击者通过使用恶意输入值来破坏您的数据库。 bobby-tables.com 给出了风险解释,以及一些如何使用 PHP / mysqli 安全地编写查询的示例。 切勿将未经处理的数据直接插入您的 SQL。按照您现在编写代码的方式,有人可以轻松窃取、错误更改甚至删除您的数据。
-
错误消息告诉您“检查与您的 MySQL 服务器版本相对应的手册以获取正确的语法使用”。你查看手册了吗:dev.mysql.com/doc/refman/8.0/en/update.html?
-
@Jocelyn 是的,我当然检查了手册。但是,由于这行代码适用于 UPDATE,我认为它也适用于 UPDATE
标签: php sql mysqli sql-update