2012-01-04 5 views
3

投稿する前に広範囲に検索しました。 :)AES_ENCRYPTを使用するとMysqliで作成された声明の問題

私はMySQLに簡単な挿入をしようとしています。私は準備された文を使ってmysqliを使用しています。コードは以下の通りです:

はい、コードの前のmySQLデータベースサーバーへの接続で$ mysqliを宣言しています。 $ keyもスクリプトの前に宣言されています。以下は、このコードが呼び出されたときにMySQLの一般的なログファイルに出力されます:

120104 10:46:18 359 Connect [email protected] on payday-loan-leads 
        359 Query  SELECT table_location, id_name, encrypt FROM insert_information WHERE required_field_name = 'first_name' 
        359 Prepare UPDATE personal_info SET first_name = AES_ENCRYPT(?,'^&IK8uBo92X04jhAHPUH(Y(8p3)&^ndlkj32') WHERE personal_id = '5282' 
        359 Execute UPDATE personal_info SET first_name = AES_ENCRYPT('','^&IK8uBo92X04jhAHPUH(Y(8p3)&^ndlkj32') WHERE personal_id = '5282' 
        359 Close stmt 
        359 Quit 

あなたが見ることができるように、MySQLはINSERTクエリを準備しているが、$値の値を取得しません。私は$のsql_queryからAES_ENCRYPTを削除すると、それは魔法のように動作:

$stmt = $mysqli->prepare("UPDATE $table SET $name = ? WHERE $id_name = '$_SESSION[$id_name]'"); 
$stmt->bind_param('s', $value); 

だから、問題は、MySQLのAES_ENCRYPT関数です。関数をbind_param行に移動しようとしましたが、これは機能しませんでした。誰でもここにアイディアがありますか?

答えて

3

エース版ではb(blob)を使用しますが、非エース版ではs(文字列)を使用します。 AESバージョンでsを試してください。フィールドやテーブル名に使用されていない限り、クエリにパラメータが表示されても問題ありません。

+0

はい、データを暗号化しているため、データを格納している列のデータ型がvarbinaryなので、私がBLOBを使用している理由があります。しかし、私はこれを試して、報告します。 –

+0

OK、それは実際に問題を解決しました! AES_ENCRYPT()に渡される最初のパラメータは暗号化される文字列なので、意味があります。私はAES_ENCRYPTの結果を考えていましたが、それは明らかにブロブです... –

関連する問題