是的,我知道有针对 PHP MySQL 更新语句的答案,但是还没有一个能解决问题。我的重置 PHP 文件使用 bind_param 或串联变量准备好查询。它在重定向到 reset_success 页面时也执行得很好。然而,数据库记录没有改变。我已确认该网站正在使用的用户具有更新权限。我什至尝试转义 password
因为它是保留字的小写版本,没有任何效果。 apache2 错误日志也没有显示任何错误,所以没有帮助。
代码如下:
if (empty($error_msg)) {
// Create a random salt
$random_salt = hash('sha512', uniqid(openssl_random_pseudo_bytes(16), TRUE));
// Create salted password
$password = hash('sha512', $password . $random_salt);
// Prepare the update statement
//if ($update_stmt = $mysqli->prepare("UPDATE members SET password = ?, salt = ? WHERE email = ?")) {
if ($update_stmt = $mysqli->prepare("UPDATE members SET password = '".$password."', salt = '".$random_salt."' WHERE email = '".$_SESSION['email']."';")) {
// Binding params
//$update_stmt->bind_param('sss', $password, $random_salt, $_SESSION['email']);
// Execute the update statement
if ($update_stmt->execute()) {
header('Location: reset_success.php');
exit();
}
else{
header('Location: error.php?err=Reset failure: UPDATE');
exit();
}
}
else{
header('Location: error.php?err=Reset failure: PREPARE');
exit();
}
}
任何见解将不胜感激!
最佳答案
好的,它正在运行。我需要在函数文件中额外调用 session_start(),即使 reset_password.php 没有重定向($_SERVER['PHP_SELF'])。注册页面及其以相同方式运行的相应功能文件不需要这样做。我仍然不清楚为什么在引用者本身而不是重定向时再次需要它。
关于PHP MySQL 更新语句失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37694621/