这个问题在这里已有答案:
我正在编写的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);