我在带有PDO的PostgreSQL数据库中使用SQL子句。我有一个生成验证码的功能,还有一个更新用户代码的功能。但是,此函数中存在一个更新代码的问题。当代码中包含字母时,它将其标识为令牌。如果只是数字或字母,它会完美地更新。我在一些帖子中读到,有必要用引号将字段括起来,但这不适用于参数。
public function upCode(Usuario $user){
try {
var_dump($user->getCode());
$sql = "UPDATE usuarios
SET usuario = jsonb_set(usuario, '{code}', :code, false)
WHERE usuario->>'email' = :email";
$stmt = (parent::getCon())->prepare($sql);
$stmt->bindValue("email", $user->getEmail());
$stmt->bindValue("code", $user->getCode(), PDO::PARAM_STR);
$stmt->execute();
}catch (PDOException $e) {
echo "". $e->getMessage();
var_dump($e);
}
}
public function gerarCode(){
$this->code = bin2hex(random_bytes(3));
}
错误:
SQLSTATE[22P02]:无效的文本表示形式:7错误:无效输入
json DETAIL类型的语法:令牌“06061c”无效。上下文:JSON
数据,第1:06061c行未命名门户参数$1=“…”
但如果我尝试这种方式,它是有效的。
$stmt->bindValue("code", "456478", PDO::PARAM_STR);