2016-07-28 70 views
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') 

會回到我在尋找的行。

回答

-1

愚蠢的問題......我忘了

$stmt->store_result();