2017-08-08 1 views
0

でMYSQL AES_ENCRYPT関数を使用すると、私のQUERY私が直接照会する場合は、ここにPDOが、間違っていると、別の文字列形式

SELECT client_id,client_name,client_db_ip,client_db_username,AES_ENCRYPT(client_db_pass, '1234') as client_db_pass,client_db_name FROM client_list WHERE client_id =:id 

//は、plsはclient_db_pass今

としてAES_ENCRYPT(client_db_pass '1234')に焦点を当てていますphpMyAdminのを使用して、私はAES_ENCRYPT後client_db_passに対する結果などを取得します:

501defc4013f3f21529c123f33c065ad 

をしかし、IAMは、データをフェッチするためにPDOを使用するときに問題が来る、

 $Q = "SELECT client_id,client_name,client_db_ip,client_db_username,AES_ENCRYPT(client_db_pass, '1234') as client_db_pass,client_db_name FROM client_list WHERE client_id =:id"; 
    $R = $this->pdo->prepare($Q); 
    $R->bindParam(':id', $id); 
    $R->execute(); 
    $result = $R->fetch(PDO::FETCH_ASSOC); 

私はこの結果を得るでしょう

($結果)のvar_dump場合:

array (size=6) 
'client_id' => string '1' (length=1) 
'client_name' => string 'tester' (length=4) 
'client_db_ip' => string '127.0.0.2' (length=9) 
'client_db_username' => string 'root' (length=4) 
'client_db_pass' => string 'PïÄ??!Rœ?3Àe­' (length=16) 
'client_db_name' => string 'test_user' (length=9) 

あなたは 'client_db_pass' という文字列の配列が

result 2 = PïÄ??!Rœ?3Àe­ 

ない

で見ることができます
result 1 = 501defc4013f3f21529c123f33c065ad 

私は結果を得る方法を知っているかもしれない1 "501defc4013f3f21529c123f33c065ad" pdoを使っているのですか?

おかげ

答えて

0

AES_ENCRYPT()は、docsによれば、バイナリデータを返す:

は、暗号化された出力を含むバイナリ文字列を返します。

MySQLクライアントに他のものが表示されているのは、クライアントが生の出力を自動的にエンコードするからです。

PHPでは、たとえば16進数のダンプを得ることができます。 bin2hex()とMySQLではHEX()とすることができます。私はあなたがそれを必要とは思わない、MySQLとPHPの両方がバイナリをうまく処理する。

関連する問題