如何修复 stmt 准备和绑定

How to fix stmt prepare and bind

我在使用准备和绑定时遇到问题。我用更少的变量尝试了同样的事情来绑定。我已经成功地使用仅包含 Fname、Lname、Password、$UserID 的 prepare 以及将 sssi 与 bind_param 对象一起使用。有人可以解释我在绑定代码中使用更多变量时做错了什么吗?使用下面的代码,它只打印出来自 mysqli 的相同数据并且不更新它。

if ($stmt = $con->prepare("UPDATE users SET Fname = ?, Lname = ?, Password = ?, UserLevel = ?, Email = ?, WHERE UserID= ?"))
{
    $stmt->bind_param("ssssssi", $firstname, $lastname, $PW, $UserLevel, $EM, $UserID);
    $stmt->execute();
    $stmt->close();
}
// show an error message if the query has an error
else
{
    echo "ERROR: could not prepare SQL statement.";
}

// redirect the user once the form is updated
header("Location: admin.php");

虽然您没有指定使这变得棘手的数据类型,但我会冒险猜测。

Fname = s

Lname = s

Password = s

UserLevel = i (?)

Email = s

我在那里数了 4 个,但你有 6

试试这个,

 $stmt->bind_param("sssisi", $firstname, $lastname, $PW, $UserLevel, $EM, $UserID);

编辑 1

如@Fred-ii- 所说,您的 SQL 查询是错误的。

改变

"UPDATE users SET Fname = ?, Lname = ?, Password = ?, UserLevel = ?, Email = ?, WHERE UserID= ?"

到,

"UPDATE users SET Fname = ?, Lname = ?, Password = ?, UserLevel = ?, Email = ? WHERE UserID= ?"

您接受了培训 ,