0

hash_hmac() 関数について読んだところ、パスワードを DB に保存するために使用しようとしました:

<?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();
}

DB の詳細:

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

その後、DB を手動でチェックし、BLOB を含む行を見つけました (これまで VARBINARY または BLOB データ型で作業/使用したことがないので、これが初めてです)

1行が存在するので、行を選択しようとします:

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

によって返される値pdo->rowCount()は 0 です。探しているパスワードが見つかりません。誰か教えてください。これを修正するには?

別の詳細:

PHP バージョン: 5.4

OS : Ubuntu 12.04 64 ビット ありがとう

4

1 に答える 1

0

解決済み

クエリでPDO::PARAM_LOBを使用すると、機能します。

私の心にもう1つあるのは:

  • addslashes()クエリの前に使用する必要がありますか?チュートリアルに従うだけaddslashes()です
于 2013-03-10T14:48:47.413 に答える