3

私は投稿する前に広範囲に検索しました。:)

mySQL に単純な挿入を行おうとしています。プリペアド ステートメントを使用して mysqli を使用しています。以下はコードです:

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

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

120104 10:46:18   359 Connect   root@localhost 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 クエリを準備していますが、$value の値を取得していません。$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 行に移動しようとしましたが、これは機能しませんでした。ここで何かアイデアはありますか?

4

1 に答える 1

3

baesバージョンではバインディングに(blob)を使用しますsが、非aesバージョンでは(string)を使用します。AESバージョンで試してくださいs。フィールド名またはテーブル名に使用されていない限り、クエリ内のどこにパラメータが表示されるかは問題ではありません。

于 2012-01-04T17:01:32.417 に答える