SQL查询可以在没有WHERE的情况下工作,但是一旦添加WHERE语句,它就无法正常运行

时间:2019-02-08 15:16:09

标签: php sql mariadb

我正在编写一个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);

1 个答案:

答案 0 :(得分:1)

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

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

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

mysqli_stmt_execute($stmt);
相关问题