首页 > 解决方案 > SQL Query 在没有 WHERE 的情况下工作,但是一旦我添加 WHERE 语句,它就无法正常运行

问题描述

我正在编写一个 SQL 查询,如下所示执行良好,但它会更新所有行。

mysqli_query($connection, 'UPDATE users SET hashed_pass = ' . mysql_escape($newpassword).'');

但是,一旦我尝试通过添加 WHERE 语句为其添加一些逻辑,我就不会收到任何错误,但它不会更新目标用户的密码。我希望语句更新,在这种情况下,用户 569(这是 $user_id 等于)。

mysqli_query($connection, 'UPDATE users SET hashed_pass = ' . mysql_escape($newpassword).' WHERE user_id ='.mysql_escape($user_id).'');

mysql_escape 函数只是去除斜杠并转义变量,所以我知道这不是原因。我还确保该表确实有 user_id 列,变量 $user_id 是 569,它与我要更新的用户匹配。运行命令后,我没有收到任何错误,并且在查询下有一个 echo 语句以确认它已运行。

任何想法我做错了什么?

更新:正如每个人建议的那样,我将我的代码转换为准备好的语句,它现在可以工作了。

$stmt = mysqli_prepare($connection,  "UPDATE users SET hashed_pass = ? WHERE user_id = ?");                             
mysqli_stmt_bind_param($stmt, "si", $newpassword, $user_id);
mysqli_stmt_execute($stmt);

标签: phpsqlmariadb

解决方案


使用准备好的语句将是第一步。PHP mysqli_prepare

$stmt = mysqli_prepare($connection, "UPDATE users SET hashed_pass = ?")

mysqli_stmt_bind_param($stmt, "s", $citynewpassword);

mysqli_stmt_execute($stmt);

推荐阅读