2011-06-21 5 views
0

SELECTクエリのINSERTにPHP PDOを使用すると異常な動作が発生します。 MySQLの中で直接クエリをテストすることがうまく機能し、私は私の行が挿入され得る:PDOを使用したSELECTからのMySQL INSERT

INSERT INTO sessionid (enc_id, enc_pass, enc_date) 
SELECT AES_ENCRYPT(username, 'aeskey'), AES_ENCRYPT(pwd, 'aeskey'), 
DATE_ADD(NOW(), INTERVAL 15 SECOND) FROM users WHERE username = 'a_user_name'; 

しかし、PDOを使用して、私はここ....一度(279行)に挿入されたユーザーごとに1つの行を持っているPHPです。

$sql_enc = ' 
    INSERT INTO sessionid (enc_id, enc_pass, enc_date) 
     (SELECT AES_ENCRYPT(username, :aeskey), AES_ENCRYPT(pwd, :aeskey), DATE_ADD(NOW(), INTERVAL 15 SECOND) FROM users WHERE username = :username) 
'; 
$res_enc = $pdo->prepare($sql_enc); 
$res_enc->bindParam(':aeskey', $aeskey); 
$res_enc->bindParam(':username', $username); 
$res_enc->bindParam(':pwd', $username); 
$res_enc->execute(); 
$res_enc = null; 

私には何が欠けていますか?私はそれが何もないと確信していますが、その単一の行を挿入することはできません。

ありがとうございます。

fabien。

+0

待機...私はここに貼り付けたばかげたエラー:bindParamを見つけました。 $ usernameはusernameと:pwdの両方に割り当てられます。申し訳ありません、質問のために、あなたの返信にペッカに感謝します。 – feub

+0

ああ、十分に公正な - 私はクエリを誤解しました。 –

答えて

1

可能性のある問題ではありませんが、コードのパスワードフィールドにユーザー名を入力します。あなたの質問にそこにaeskeyを挿入します。私が見つけることができる唯一の違いです。

+0

はい、ホッパなのですが、これは私がこれを投稿する前に見つけられなかった理由を理解していません。ごめんなさい、ありがとうございます。> – feub

0

PDO::bindParamのPHPドキュメントをご覧ください。そこに一人のユーザーが提案:

が...あなたは、各パラメータを使用する必要があり、一度 と一度だけ...

だから、あなたは二回、ユーザー名とaeskeyを使用しました。

$sql_enc = ' 
    INSERT INTO sessionid (enc_id, enc_pass, enc_date) 
     (SELECT AES_ENCRYPT(:username1, :aeskey1), AES_ENCRYPT(:pwd, :aeskey2), DATE_ADD(NOW(), INTERVAL 15 SECOND) FROM users WHERE username = :username2) 
'; 
$res_enc = $pdo->prepare($sql_enc); 
$res_enc->bindParam(':aeskey1', $aeskey); 
$res_enc->bindParam(':aeskey2', $aeskey); 
$res_enc->bindParam(':username1', $username); 
$res_enc->bindParam(':username2', $username); 
$res_enc->bindParam(':pwd', $username); 
$res_enc->execute(); 
$res_enc = null; 
+0

なぜ彼が 'users'からなぜ彼が選んだのかすべてのパラメータを提供していますか? :) –

+0

ジェフ、質問の理由は私の問題ではありませんでしたが、回答が必要な場合は、ユーザーのIDとパスワードを一時テーブルで暗号化してJavaアプリケーション(私が開発していないもの)に渡すだけです。これについては、ソリューションがシンプルで、他のプログラム(Apache/PHP/MySQL以外)を必要としない限り、PHPとJavaアプリケーションの間でパラメータを渡す方法についての提案はありません。 – feub

関連する問題