繁体   English   中英

在PDO上使用MYSQL AES_ENCRYPT函数,但字符串格式错误且不同

[英]Using MYSQL AES_ENCRYPT function with PDO but wrong and different string format

这是我的查询

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来获取数据时,

        $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($ result)

我会得到这个结果:

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”?

谢谢

根据docsAES_ENCRYPT()返回二进制数据:

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

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

在PHP中,您可以使用例如bin2hex()获得十六进制转储,而在MySQL中,您可以使用HEX()实现十六进制转储。 我认为您不需要它,因为MySQL和PHP都可以很好地处理二进制文件。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM