我试图用PHP PDO中的以下代码更改用户的密码:
public function resetaSenha(string $senha, string $id){
$con = $this->conexao;
$sql = "UPDATE users SET senha = :senha WHERE id = sha1(:id)";
$obj = $con->prepare($sql);
$obj->bindParam(":senha", $senha);
$obj->bindParam(":id", $id);
$obj->execute();
}
我用id 1的sha1散列和密码调用这个函数(我这样做只是为了测试):
require_once("funcoes_db.php");
$func = new FuncoesDb();
$func->resetaSenha("05fe7461c607c33229772d402505601016a7d0ea", "356a192b7913b04c54574d18c28d46e6395428ab");
但它不起作用。如果我将查询更改为:,它就会工作
$sql = "UPDATE users SET senha = :senha WHERE id =:id";
并用调用函数
`$func->resetaSenha("05fe7461c607c33229772d402505601016a7d0ea", "1")`;
但我通过URL获取值,我需要对它们进行加密。为什么不这样做?
我想你在没有意识到的情况下打错了字。查询字符串在:id
上调用sha1
函数,而应该在:senha
上调用该函数来散列密码。
$sql = "UPDATE users SET senha = :senha WHERE id = sha1(:id)";
应该是
$sql = "UPDATE users SET senha = sha1(:senha) WHERE id = :id";
您的id列是varchar类型吗?如果不是,如果是int自动递增,则不应在where子句中使用WHERE id = sha1(:id)
。
如果你想在URL中加密用户id,可以尝试使用base64进行编码和解码。Sha1是一个哈希函数,你无法解码。