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