簡體   English   中英

PHP MySQL更新語句失敗

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM