【发布时间】:2017-03-15 01:19:20
【问题描述】:
我正在尝试使用以下代码使用 userid 参数编辑数据库中的一行。
但是使用代码我得到了这个错误:
您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在 'SET firstname = IF(? '', ?, firstname), SET surname = IF(? 附近使用正确的语法
我真的不确定问题出在哪里,因为 SQL 查询中的所有内容都按顺序排列。我试过取出 IF(? '', ?, ) 但它仍然给出错误。我已经仔细检查了表中的所有列名是否正确。我究竟做错了什么?
<?php
include 'database_conn.php';
if(!$conn)
{
echo "Error connecting to database";
}
if (mysqli_connect_errno())
{
echo "<p>Connection failed:".mysqli_connect_error()."</p>\n";
}
$id = isset($_GET['userId']) ? $_GET['userId'] : NULL;
$newUsername = isset($_REQUEST['updateUsername']) ? $_REQUEST['updateUsername'] : NULL;
$newEmail = isset($_REQUEST['updateEmail']) ? $_REQUEST['updateEmail'] : NULL;
$newPassword = isset($_REQUEST['updatePassword']) ? $_REQUEST['updatePassword'] : NULL;
$newForename = isset($_REQUEST['updateForename']) ? $_REQUEST['updateForename'] : NULL;
$newSurname = isset($_REQUEST['updateSurname']) ? $_REQUEST['updateSurname'] : NULL;
$newDob = isset($_REQUEST['updateDob']) ? $_REQUEST['updateDob'] : NULL;
$sql = "UPDATE Users
SET username = IF(? <> '', ?, username),
SET firstname = IF(? <> '', ?, firstname),
SET surname = IF(? <> '', ?, surname),
SET email = IF(? <> '', ?, email),
SET password = IF(? <> '', ?, password),
SET dateofbirth = IF(? <> '', ?, dateofbirth)
WHERE id = ?";
$stmt = mysqli_prepare($conn, $sql)
or die(mysqli_error($conn));
mysqli_stmt_bind_param($stmt, "ssssssi", $newUsername, $newForename, $newSurname, $newEmail,
$newPassword, $newDob, $id)
or die(mysqli_error($conn));
mysqli_stmt_execute($stmt)
or die(mysqli_error($conn));
if($stmt)
{
echo "Details updated successfully";
}
else
{
die(mysqli_error($conn));
}
mysqli_close($conn);
?>
【问题讨论】:
-
你到底想用那个 SQL 语法做什么?
IF(? <> '', ?, username)到处都是。您是否只是想将用户名设置为等于$_REQUEST['updateUsername'])?我强烈建议检查this existing answer。 -
这不是 UPDATE 的工作方式。 RTMdev.mysql.com/doc/refman/5.7/en/update.html
-
另外,我希望你不要忍受这个;存储纯文本密码。
-
我在另一个堆栈溢出线程上发现了它,并不确定它在做什么。如果表单中没有输入值,我要做的就是不要用空白字符串覆盖行中的值。不,弗雷德,它不会上线。
-
我想知道它的链接,因为语法错误。最好在回复@Ajek 时像我在这里所做的那样给我打电话。我并不总是在场。