Php 使用VARBINARY编写MySQL-PDO语句

Php 使用VARBINARY编写MySQL-PDO语句,php,mysql,pdo,password-hash,Php,Mysql,Pdo,Password Hash,我有一个带有用户名和密码的MySQL数据库。用户名是varchar(25),密码是VARBINARY(250)。密码通过PHP的password_散列函数生成散列,然后与PDO绑定,以便存储到VARBINARY(250)字段中。当字段填充为VARCHAR而不是VARBINARY时,就会出现问题 $stmt = $pdo->prepare("INSERT INTO logins (username, password) VALUES (:USERNAME, cast(:PWD as bina

我有一个带有用户名和密码的MySQL数据库。用户名是varchar(25),密码是VARBINARY(250)。密码通过PHP的password_散列函数生成散列,然后与PDO绑定,以便存储到VARBINARY(250)字段中。当字段填充为VARCHAR而不是VARBINARY时,就会出现问题

$stmt = $pdo->prepare("INSERT INTO logins (username, password) VALUES (:USERNAME, cast(:PWD as binary(250)));
$stmt->bindValue("USERNAME", $this->username, PDO::PARAM_STR);
$stmt->bindValue("PWD", password_hash($password, $algorithm, ['cost' => 5]), PDO::PARAM_STR);
密码结果存储为:$2y$05$bwnq0NT4WLZorHQ/mV7CjeD7jY7fScK46BqKesVXw5o0WyXg1Ea0K

然而,如果我运行这个

$stmt = $pdo->prepare("INSERT INTO logins (username, password) VALUES (:USERNAME, cast('$2y$05$bwnq0NT4WLZorHQ/mV7CjeD7jY7fScK46BqKesVXw5o0WyXg1Ea0K' as binary(250)));
$stmt->bindValue("USERNAME", $this->username, PDO::PARAM_STR);
密码结果按预期存储: 2432792430352F6D5637436A6544376A59376653634B343642714B6573565877356F3057795867314561304B000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000


总之,我猜想PHP的password_散列函数会延迟/干扰将生成的散列转换为二进制。我不知道如何解决这个问题。有什么想法吗?

建议使用类型为
varchar(255)
的数据库字段,是否有理由将其声明为
varbinary(250)
?此外,您的成本因素非常低,应该在10左右,我想这是出于调试原因?是的,这是正确的。