[英]PHP MySQL update statement fails
是的,我知道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'])。 注冊頁面及其相應的功能文件以相同的方式運行時不需要這樣做。 我仍然不清楚為什么當引用者本身並且不重定向時再次需要它。
這應該是一個評論,但它有點長。
$ random_salt = hash('sha512',uniqid(openssl_random_pseudo_bytes(16),TRUE));
這非常錯誤。 您正在填充16到64位的鹽, 並通過散列來刪除熵。 如果你想要64個隨機字節,那么只需使用openssl_random_pseudo_bytes(64)。
apache2錯誤日志也顯示沒有錯誤
你檢查過PHP錯誤記錄是否有效?
你為什么不檢查mysql日志?
if($ update_stmt-> execute()){
嘗試檢查$ update_stmt-> affected_rows()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.