我正在尝试创建一个更改用户密码的功能:
public function ChangePassword($password)
{
$query = $this->db->prepare("UPDATE users SET password = :password WHERE id=:user_id");
$hash = password_hash($password, PASSWORD_BCRYPT, ['cost' => 10]);
$query->bindParam("password", $hash, PDO::PARAM_STR);
$query->execute();
return true;
}
但是它显示了“Uncaught PDOException:SQLSTATE [HY093]”。当我使用
$query = $this->db->prepare("INSERT INTO users(password) VALUES (:password)");
而不是
$query = $this->db->prepare("UPDATE users SET password = :password WHERE id=:user_id");
它有效,意味着我得到一个带密码条目的附加行。我没有找到显示正确使用UPDATE的文档。
答案 0 :(得分:0)
您必须为SQL字符串中的每个参数占位符提供绑定值。不多也不少。
所以你需要这样的东西:
$query->bindParam("user_id", $userid);
但我注意到你的函数中没有任何$ userid。你需要那个。
答案 1 :(得分:0)
喜欢这样:
public function ChangePassword($password,$user_id)
{
$query = $this->db->prepare("UPDATE users SET password = :password WHERE id=:user_id");
$hash = password_hash($password, PASSWORD_BCRYPT, ['cost' => 10]);
$query->bindParam("password", $hash, PDO::PARAM_STR);
$query->bindParam("user_id",$user_id);
$query->execute();
return true;
}
注意:
bindParam
user_id
并传递参数user_id
,如下所示:ChangePassword($password,$user_id)
答案 2 :(得分:0)
检查完整的错误消息,这提供了相当多的提示! SQLSTATE [HY093]表示"参数号无效"
缺少参数user_id
。
public function ChangePassword($password, $userId)
{
$query = $this->db->prepare("UPDATE users SET password = :password WHERE id=:user_id");
$hash = password_hash($password, PASSWORD_BCRYPT, ['cost' => 10]);
$query->bindParam("password", $hash, PDO::PARAM_STR);
$query->bindParam("user_id", $userId, PDO::PARAM_STR);
$query->execute();
return true;
}
答案 3 :(得分:0)
我相信当用户登录时,当前登录的用户ID会存储在会话中。
因此,这就是你所需要的。
我相信当用户登录时,当前登录的用户ID会存储在会话中。
因此,这就是你所需要的。
<?php
function ChangePassword($password)
{
$hash = password_hash($password, PASSWORD_BCRYPT,['cost' => 10]);
$query = $this->db->prepare("UPDATE users SET password = :password WHERE id=:user_id")->execute(array(
":password" => $hash,":user_id" => $_SESSION['userid']));
return true;
}
?>