投稿する前に広範囲に検索しました。 :)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行に移動しようとしましたが、これは機能しませんでした。誰でもここにアイディアがありますか?
はい、データを暗号化しているため、データを格納している列のデータ型がvarbinaryなので、私がBLOBを使用している理由があります。しかし、私はこれを試して、報告します。 –
OK、それは実際に問題を解決しました! AES_ENCRYPT()に渡される最初のパラメータは暗号化される文字列なので、意味があります。私はAES_ENCRYPTの結果を考えていましたが、それは明らかにブロブです... –