Как вставить массив в один подготовленный MySQL оператор с PHP и PDO

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

Например:

Я хочу зарегистрироваться в программах с идентификаторами 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 я не совсем уверен, как это работает, особенно с заполнителями (?).

Есть предложения?

16
задан JM4 7 January 2011 в 18:46
поделиться