我想做一个让我通过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: 我已经看过这个问题并尝试删除引号但没有奏效。问题出在空间。 所以,对不起,但我不认为这个问题被标记为重复的问题的答案可能对我有帮助。