Проблема с массовой вставкой в mysql с использованием pdo и php

Я пытаюсь вставить объемные записи в mysql, используя pdo, но по какой-то причине я не могу создать запрос.

Мой POST выглядит так

Array
( 
 [ques_1] => dsadasd
 [ques_2] => 5
 [ques_3] => dasdsad
 [ques_4] => 23/7/2014
 [savecontinue] => Save & Continue
)

Мой желаемый массив должен выглядеть так:

Array
( 
 [quid] => 1 
 [answer] => dasdsad
)
Array
( 
 [quid] => 2 
 [answer] => on
)
Array
( 
 [quid] => 3 
 [answer] => dasdsad
)
Array
( 
 [quid] => 4 
 [answer] => 23/7/2014
)

Мой код выглядит так:

foreach($_POST as $k=>$v)
{
 if($k != 'savecontinue' and $k != 'skipsave')
 {
 list(,$qid) = explode("_",$k);
 $insertData[$qid] = $v;

 }
}

$sql = "INSERT INTO answers (quid, answer)
 VALUES (:quid, :answer)";
$query = $this->db->prepare($sql);
$query->execute($insertData);

Ошибка PDOStatement :: execute(): SQLSTATE [HY093]: Недопустимый номер параметра: количество связанных переменных не совпадает с числом токенов

Примечание. Я упростил/уменьшил параметры запроса и код для лучшего понимания.

2 ответа

Мне кажется, что вам будет лучше с чем-то подобным.

Вы также передавали многим параметрам INSERT, массив, который вы передаете, должен иметь только те значения, которые требуются запросу, и называть их "впереди".

// prepare the query for multiple use later
$sql = "INSERT INTO answers (userid, catid, quid, qstep, answer)
 VALUES (:userid, :catid, :quid, :qstep, :answer)";
$query = $this->db->prepare($sql);

// create an array of inputs
for ($x=1; $x < 5; $x++ ) {
 $insertData[] = array( ':userid' => 1,
 ':catid' => $_POST['catid'],
 ':quid' => $x,
 ':qstep' => 1,
 ':answer' => $_POST['ques_'.$x]); 
}

// loop over the array of inputs 
foreach ( $insertData as $data ) {
 $query->execute($data);
}


Измените следующее:

$insertData = array("$qid"=>"$v");

чтобы:

$insertData[$qid] = $v;

licensed under cc by-sa 3.0 with attribution.