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