2017-08-08 29 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都能很好地處理二進制文件。