-1

我已经在这件事上编码了几个小时,所以我想我在这里遗漏了一些非常简单的东西,但我似乎找不到它。

我收到这两个错误

警告:PDOStatement::execute() [pdostatement.execute]: SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens on line 77

警告:PDOStatement::execute() [pdostatement.execute]: SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens on line 79

public function resetPassword($password, $email){
    $rst    =   $this->db->prepare("insert into users (password) values (?) where email=? ");
    $rst->bindParam('?', $password);
    $rst->bindParam('?', $email);
    $rst->execute();
    
    if($rst->execute()){
        return "Password changed!"; 
    }
    else echo "Could not change password.";
}

我是不是忘记了什么?

4

1 回答 1

1

当使用问号作为占位符时,您将一个数组发送到 execute 方法,如下所示:$rst->execute(array('placeholder1value', 'placeohlder2value'));

但是,如果您想使用命名占位符,您可以 bindParam/bindValue 它们,如下所示:

$stmt = $pdo->prepare('INSERT INTO table (key1, key2) VALUES (:key1, :key2)');
$stmt->bindValue(':key1', 'somevalue', PDO::PARAM_STR);
$stmt->bindValue(':key1', 3532, PDO::PARAM_INT);
$stmt->execute();

bindParam请阅读和之间的区别bindValue

另请注意,您的 SQL 查询没有意义,您的意思是执行UPDATE?

于 2013-01-27T20:56:50.033 回答