Во время онлайн-регистрации клиент может выбрать несколько программ, которые они выбирают для регистрации. Эти программы представляют собой трехзначные целые числа и хранятся в массиве.
Например:
Я хочу записаться в programid 155, 165, 175 и 185.
Мой массив настроен так же просто, как:
$data = array();
$data[] = 155;
$data[] = 165;
$data[] = 175;
$data[] = 185;
Когда придет время вставить эту информацию в связанную таблицу, я также добавлю дополнительные элементы из другой части регистрации:
Например, если бы я выполнял инструкцию установки SINGLE, она выглядела бы следующим образом:
$stmt = $db->prepare("INSERT INTO table SET memberID=?, programID=?, date_added=NOW()");
$stmt->execute(array($memberid, 155));
Обычно я создавал бы простой цикл для массива выше, который вызывал бы несколько экземпляров инструкции sql и выполнял бы, например:
for($j = 0; $j < (count($data)-1); $j++) {
$stmt = $db->prepare("INSERT INTO table SET memberID=?, programID=?, date_added=NOW()");
$stmt->execute(array($memberid, $data[$j]));
}
Я понимаю, что указанный выше код недействителен ($ data [$ j]), но ищет правильный способ совершения вызова.
Мне также сказали, что создание одного динамического оператора sql в целом лучше, чем несколько вызовов, как описано выше. Мой первый проход будет примерно таким:
$sql = array();
foreach( $data as $row ) {
$sql[] = '("'.$memberid.'", "'.$row[$j].'", NOW()")';
}
mysql_real_query('INSERT INTO table (memberid, programid) VALUES '.implode(',', $sql));
но с PDO я не совсем уверен, как это работает, особенно с заполнителями (?).
Любые предложения?