PDO准备了功能问题

时间:2012-11-04 00:56:58

标签: php mysql pdo

我无法让它工作我认为我的错误是在准备好的语句的语法中,但我尝试了几种不同的方法,没有运气。我怀疑错误是在准备好的语句中的原因是因为如果变量不匹配,它将在页面上echo Not a Match但是当它们匹配时它只会给我一个没有错误的空白页面。这是我的代码,也许有人可以发现错误,我将继续尝试不同的方法。

    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";

    }

}

1 个答案:

答案 0 :(得分:4)

你错误地将括号误认为是反叛。使用反引号"`"在SQL中转义表名和列名。

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

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

你也有几个拼写错误:

  • $newPass被声明为camelCase,但在您的第二个$new_pass声明中用作execute
  • 我不确定PDO语句是否区分大小写,但您已将PDO变量声明为:newPass并在:newpass <中将其用作execute / LI>

将来,请阅读PDO中的错误检查/处理: