0

我刚刚阅读了 hash_hmac() 函数,我尝试使用它在数据库中存储密码:

<?php
$dsn = 'mysql:host=localhost;dbname=test';
$username = 'root';
$pass = 'password';

$conn = new PDO($dsn, $username, $pass);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$conn->setAttribute(PDO::ATTR_PERSISTENT, TRUE);

$password = '123MonyeTSahuR456';

    $p = addslashes(hash_hmac('sha256', $password, '13#slP3mK;"dA$@m', TRUE));    

    $query = "INSERT INTO table_one VALUES(NULL, :password)";

try
{
    $pdo = $conn->prepare($query);
    $pdo->bindValue(':password', $p);

    if($pdo->execute())
    {
        echo $pdo->rowCount();
    }
    else
    {
        echo 'fail';    
    }
}
catch(PDOException $e)
{
    echo $e->getMessage();
}

数据库详细信息:

id INT NOT NULL AUTO INCREMENT
password VARBINARY(32) NOT NULL

之后我手动检查了我的数据库并找到了一行带有 BLOB 的行(我以前从不使用/使用 VARBINARY 或 BLOB 数据类型,所以这是我的第一次)

所以存在 1 行,我尝试选择该行:

    $query = "SELECT * FROM table_one WHERE password = :password";

返回的pdo->rowCount()值为 0 ,它没有找到我正在寻找的密码,任何人都可以告诉我为什么?如何解决这个问题?

另一个细节:

PHP版本:5.4

操作系统:Ubuntu 12.04 64 位谢谢

4

1 回答 1

0

解决了

通过在查询中使用PDO::PARAM_LOB,它可以工作..

在我的脑海中还有一件事是:

  • 我应该addslashes()在查询之前使用吗?addslashes()我只是按照教程进行操作
于 2013-03-10T14:48:47.413 回答