MySQL INSERT из SELECT с PDO

У меня странное поведение с использованием PHP PDO для INSERT из запроса SELECT. Тестирование запроса непосредственно в MySQL работает хорошо, я вставил свою строку:

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 строк) …. Вот 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; 

Что мне не хватает? Я почти уверен, что это ничего, но не может заставить его вставить эту единственную строку.

Спасибо.

Фабьен.

Не то, чтобы это была вероятная проблема, но вы вводите имя пользователя в поле пароля в своем коде. В вашем запросе вы вставляете aeskey. Это единственное различие, которое я могу заметить.

Посмотрите на документацию PHP для PDO :: bindParam . Один пользователь предложил:

… вы должны использовать каждый параметр один раз и только один раз …

Таким образом, вы использовали имя пользователя и 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;