2012-11-04 20 views
2

我有麻煩得到這個工作我認爲我的錯誤是在準備語句的語法,但我嘗試了幾種不同的方法,沒有運氣。我懷疑錯誤是在準備好的聲明中的原因是因爲它將在頁面上echo Not a Match如果變量不匹配,但當它們匹配時,它只會給我一個沒有錯誤的空白頁面。這裏是我的代碼,也許有人可以發現錯誤,同時我會繼續嘗試不同的方法。PDO編寫的函數問題

function setPass($conn, $userCurrent, $oldPass, $newPass, $verPass) 

{   
    $stmt= $conn->prepare('SELECT `password` FROM `CLL_users` WHERE `user_name`=:userCurrent'); 
    $stmt->execute(array(':userCurrent' => $userCurrent)); 
    while ($pass = $stmt->fetch()){ 
    $oldDbPass = $pass['password']; 
    } 

$new_pass = md5($newPass); 

    if (md5($oldPass) == ($oldDbPass) && ($newPass) == ($verPass)) { 
try{ 
     $stmt= $conn->prepare('UPDATE `CLL_users` SET `password`=:newPass WHERE `user_name`=:userCurrent'); 
     $stmt->execute(array(':newpass' => $new_pass, ':userCurrent' => $userCurrent)); 
} catch (PDOException $e){ 
    echo 'Connection failed: ' . $e->getMessage(); 
} 

     echo "Match"; 
    } else { 
     echo "Not a Match"; 

    } 

} 

回答

4

你錯誤的反引號括號。使用反引號「`」來轉義SQL中的表名和列名。

SELECT `password` FROM `CLL_users` WHERE `user_name`=:userCurrent 

UPDATE `CLL_users` SET `password`=:newPass WHERE `user_name`=:userCurrent 

也有幾個錯別字:

  • $newPass聲明爲駝峯,但在你的第二個execute聲明作爲$new_pass
  • 我不知道,如果PDO語句是區分大小寫的,但你在聲明PDO變量:newPass並在execute

使用它作爲:newpass對於未來,瞭解錯誤檢查/處理中PDO:

+0

我只是想你什麼建議,得到了相同的結果..好吧 – Yamaha32088

+0

我啓用了錯誤處理,並得到這個消息'連接失敗:SQLSTATE [HY093]:無效的參數號:參數不defined' – Yamaha32088

+0

我更新根據您的建議編寫代碼並編輯我的問題以反映更改。 – Yamaha32088