2017-08-08 30 views
0

这里MYSQL AES_ENCRYPT函数是我的查询使用与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 

//请注重AES_ENCRYPT(client_db_pass, '1234')作为client_db_pass

现在,如果我直接查询使用phpMyAdmin,我将AES_ENCRYPT后得到的结果如为client_db_pass:

501defc4013f3f21529c123f33c065ad 

但是在使用PDO获取数据IAM的问题来了,

 $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 

如果使用pdo,我可否知道如何获得结果1“501defc4013f3f21529c123f33c065ad”?

感谢

回答

0

AES_ENCRYPT(),根据docs,返回二进制数据:

返回包含加密输出的二进制字符串。

如果您在MySQL客户端中看到其他任何内容,这是因为客户端自动对原始输出进行编码。

在PHP中,您可以使用例如十六进制转储。 bin2hex(),在MySQL中你可以用HEX()来完成。我不认为你需要它,但MySQL和PHP都能很好地处理二进制文件。