0
我無法從使用內置AES_ENCRYPTION的數據庫中選擇行的準備語句。如果我通過phpMyAdmin正常運行查詢,它會正常運行,並返回期望的值,但是通過bind_params運行它始終返回-1。Mysqli使用AES加密編寫聲明
返回-1和任何行
$query = "SELECT `col0`,
CAST(AES_DECRYPT(`col1`, '$this->key') AS CHAR(50)) col1_decrypt,
CAST(AES_DECRYPT(`col2`, '$this->key') AS CHAR(50)) col2_decrypt
FROM `$table` WHERE `$field` = AES_ENCRYPT(?, '$this->key')";
// Also tried this in the where clause.
// -- WHERE CAST(AES_DECRYPT(`$field`, '$this->key') AS CHAR(50)) = ?";
if($stmt = $this->db->prepare($query)) {
try {
$stmt->bind_param('s', $incomingField);
} catch (Exception $e) {
// Testing
print $this->db->error;
}
$stmt->execute();
if($stmt->num_rows > 0) {
print "found";
} else {
print "not found";
}
返回
(mysqli_stmt)#52(10){ [ 「affected_rows」] => INT(-1 ) [「insert_id」] => int(0) [「num_rows」] => int(0)
運行這只是一個正常的查詢:
SELECT `col0`,
CAST(AES_DECRYPT(`col1`, 'secret key') AS CHAR(50)) col1_decrypt,
CAST(AES_DECRYPT(`col2`, 'secret key') AS CHAR(50)) col2_decrypt
FROM `tablename` WHERE `field` = AES_ENCRYPT('search value', 'secret key')
會回到我在尋找的行。