Во время онлайн-регистрации клиент может выбрать ряд программ, в которых он хочет зарегистрироваться. Эти программы представляют собой трехзначные целые числа и хранятся в массиве.
Например:
Я хочу зарегистрироваться в программах с идентификаторами 155, 165, 175 и 185.
Мой массив настроен так просто, как:
$data = array();
$data[] = 155;
$data[] = 165;
$data[] = 175;
$data[] = 185;
Когда приходит время вставить эту информацию в связанную таблицу, я также включаю дополнительные элементы из другой части регистрации:
Например, если бы я выполнял ОДИН оператор вставки программы, это выглядело бы следующим образом:
$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 я не совсем уверен, как это работает, особенно с заполнителями (?).
Есть предложения?