我正在编写一个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);
使用预准备语句将是第一步。PHP mysqli_prepare
$stmt = mysqli_prepare($connection, "UPDATE users SET hashed_pass = ?")
mysqli_stmt_bind_param($stmt, "s", $citynewpassword);
mysqli_stmt_execute($stmt);