如何为此更新查询解决此PDOException?

时间:2016-11-10 10:07:17

标签: php pdo fetch

我想做一个让我通过4个输入改变密码的功能:

$utente (a user id that comes from a session)
$pswold (the old password)
$pswnew (the new password)
$rippswnew (the repeated new password)

该函数的第一部分看起来$ pswnew和$ rippsnew是否相同,如果有效的话就很简单。

如果旧密码与会话中的用户之间的密码相关,那么第二部分会查看数据库。

给我带来问题的部分是Passwordupdate功能。 这是显示的完整错误:

Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[HY093]: 
Invalid parameter number: number of bound variables does not match number of tokens' in 
C:\xampp\htdocs\Portaleambv3\class\Utente.php:111 
Stack trace: #0 C:\xampp\htdocs\Portaleambv3\class\Utente.php(111): 
PDOStatement->execute() #1 
C:\xampp\htdocs\Portaleambv3\class\Utente.php(89): 
Utente->Passwordupdate('1', 'd6f644b19812e97...') #2 
C:\xampp\htdocs\Portaleambv3\process_cambiopsw.php(34): 
Utente->Changepassword('1') #3 {main} thrown in 
C:\xampp\htdocs\Portaleambv3\class\Utente.php on line 111

这是我的功能

public function Changepassword($utente) {
    $db = dbConn::getConnection();

    $pswold = filter_input(INPUT_POST, 'pswold', FILTER_SANITIZE_SPECIAL_CHARS);
    $pswnew = filter_input(INPUT_POST, 'pswnew', FILTER_SANITIZE_SPECIAL_CHARS);
    $rippswnew = filter_input(INPUT_POST, 'rippswnew', FILTER_SANITIZE_SPECIAL_CHARS);

    if ($pswnew === $rippswnew) {
        $query = "Select UTE_ID, UTE_USERNAME, UTE_PASSWORD from utenti" .
                " where UTE_ID=:utente and UTE_PASSWORD=:password ";
        $statement = $db->prepare($query);
        $statement->bindValue(':utente', $utente, PDO::FETCH_OBJ);
        $statement->bindValue(':password', $pswold, PDO::FETCH_OBJ);
        $statement->execute();

        $ute_id = $statement->fetchColumn(0);
        if ($ute_id != NULL) {
            $db = null;
            $statement = null;
            $this->Passwordupdate($utente, $pswnew);
            return true;
        } else {
            $_SESSION["error"] = 'Message';
            header('Location: impostazioni.php');
            return false;
        }
    } else {
        $_SESSION["error"] = 'Message';
        header('Location: impostazioni.php');
        return false;
    }
}

private function Passwordupdate($utente, $pswnew) {
    $db = dbConn::getConnection();
    $query = "UPDATE utenti " .
            "SET UTE_PASSWORD=:pswnew " .
            "where UTE_ID=:uteid";
    $statement = $db->prepare($query);
    $statement->bindValue(':uteid', $utente, PDO::FETCH_OBJ);
    $statement->bindValue(':pswnew', $pswnew, PDO::FETCH_OBJ);
    $statement->execute();

    $_SESSION["error"] = 'Password is changed';
    header('Location: impostazioni.php');
}

第111行是$ statement-> execute();在Passwordupdate函数中,89是调用Passwordupdate函数的地方。 我试图直接在phpmyadmin中运行更新语句,也可以使用。

EDIT 解决

EDIT2: 我已经看过这个问题并尝试删除引号但没有奏效。问题出在空间。 所以,对不起,但我不认为这个问题被标记为重复的问题的答案可能对我有帮助。

0 个答案:

没有答案