2012-10-10 75 views
1

我正在處理PHP腳本以重置用戶的密碼。我有一個電子郵件和一個令牌檢查設置,以便在允許用戶重置之前這兩個必須有效。到目前爲止,所有的工作都到了我將密碼插入數據庫的地步。下面是我的PDO的代碼(我打破了在這些地區的SQL查詢,以便它在更容易一眼):PHP PDO未執行SQL命令

try { 
    $sql = "UPDATE users 
      SET password=:password, sessionTime=:sessionTime, sessionID=:sessionID 
      WHERE sessionID=:sessionID"; 
    $update = $con->prepare($sql); 
    $update->bindValue("password", hash("sha256", $password . $salt), PDO::PARAM_STR); 
    $update->bindValue("sessionID", "0", PDO::PARAM_STR); 
    $update->bindValue("sessionTime", "0", PDO::PARAM_STR); 
    $update->execute(); 
    echo "<br /> Successfully updated the password!"; 
} catch(PDOException $e) { 
    throw new Exception('something went wrong with the password reset', 0, $e); 
} 

$salt$password是在此之前定義的,而當我運行該腳本,它輸出Successfully updated the password!,但是,我的數據庫中沒有任何更改。當我複製並將查詢粘貼到phpMyAdmin並將:name參數更改爲實際字符串時,它完美地工作(更新我的數據庫),並且不會返回任何錯誤 - 另外,我沒有收到php_error.log中的任何內容,所以我沒有真的很確定爲什麼這不起作用。

任何幫助將不勝感激,謝謝。

回答

1

你可以運行errorInfo中的腳本像下面並報告結果:

<?php 

try { 
    $sql = "UPDATE users 
      SET password=:password, sessionTime=:sessionTime, sessionID=:sessionID 
      WHERE sessionID=:sessionID"; 
    $update = $con->prepare($sql); 
    $update->bindValue("password", hash("sha256", $password . $salt), PDO::PARAM_STR); 
    $update->bindValue("sessionID", "0", PDO::PARAM_STR); 
    $update->bindValue("sessionTime", "0", PDO::PARAM_STR); 
    $update->execute(); 

    var_dump($update->errorInfo()); 
    echo "<br /> Successfully updated the password!"; 
} catch(PDOException $e) { 
    throw new Exception('something went wrong with the password reset', 0, $e); 
} 
+0

是啊,這是我回來了:'陣列(3){[0] =>串(5)「00000 「[1] => NULL [2] => NULL}',以及它說它的工作。 – John

+0

如果你迴應哈希(「sha256」,$ password。$ salt),會發生什麼情況;你得到了什麼?我也看到你正在設置'sessionID',其中sessionID ='0'。所以你有兩個佔位符:sessionID但只綁定一次。 –

+0

散列返回它應該 - 我之前做了錯誤檢查。但'sessionID'的工作!我以爲我之前已經定義了它,但是我忘記了每次執行這種查詢時都必須綁定。它現在完美運行,謝謝! – John