我有一个表单,提交后将更新数据库中的现有信息。但是,一旦提交表单,代码就会引发错误。下面是错误和我正在使用的代码。
“错误更新记录:您的SQL语法有错误;请检查与您的MariaDB服务器版本相对应的手册,以在'UPDATE def SET color = blue WHERE id ='26'; UPDATE def附近使用正确的语法设置味精= 嗨,第2行的“ WHER”
<?php
if (!empty($_POST)) {
$conn = new mysqli($host, $user, $password, $database_name);
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
$sql = "UPDATE def SET title = $_POST[title] WHERE id = '$_GET[id]';
UPDATE def SET color = $_POST[color] WHERE id = '$_GET[id]';
UPDATE def SET msg = $_POST[msg] WHERE id = '$_GET[id]';";
if ($conn->query($sql) === TRUE) {
echo "Record updated successfully";
} else {
echo "Error updating record: " . $conn->error;
}
$conn->close();
}
?>
不知道为什么会这样,因为我多次更改了代码,并在Stackoverflow中进行了搜索,没有结果。
答案 0 :(得分:2)
您在这里遇到多个问题。
必须包装字符串($_POST['title']
,$_POST['color']
,$_POST['msg']
)用引号或单引号 。从您得到的错误中可以清楚地看出这一点。
$_POST['id']
,我假设它是一个数字。那是不需要唯一需要引号的内容。但是,正如我在下面指出的,无论如何,您都不应该这样做。它使您容易受到SQL注入攻击。 您命名的数组索引(title
,color
,msg
等)应该用单引号引起来: $_POST['title']
,而不是$_POST[title]
。
您正尝试通过一次调用$conn->query()
来执行多个查询。那不行您将需要调用$conn->multi_query()
,但不必这样做,因为那样很难测试,调试和维护。通常,您应该分拆代码,以便一次运行一个查询。
UPDATE
查询中更新匹配行的所有三列。此外,您对**SQL injection **持开放态度。您需要使用准备好的语句,而不是将变量连接到查询中。仅转义变量是不够的。参见How can I prevent SQL injection in PHP?。