В настоящее время я строю ПДО вставить похожее на это:PDO связывают PARAMS в перекручивание массив
foreach($r->occurrences as $row) {
$arr[] = array(
'id' => $id,
'name' => $name,
'start' => $row->getTimestamp(),
'end' => $row->getTimestamp() + $duration,
'note' => $notes
);
};
$keys = implode(',', array_keys($arr[0]));
// Format into ('1','2','4'),('8','3','4') for insertion
foreach ($repBkgArr as &$array) {
$array = "('".implode("','", $array)."')";
}
$values = implode(',', $arr);
$query = "INSERT INTO table ($keys) VALUES $values";
$db->execute($query);
В этом случае я не могу, очевидно, просто связать переменные во втором параметре функции исполнения, потому что я 'm пакетная вставка нескольких наборов данных.
$db->execute($query, array(':id' => $id, ':name' => $name);
Как я могу справиться с этим? Я весь день занимаюсь исследованиями, и, похоже, я не могу найти что-либо, что я могу применить к моей ситуации.
Вместо пакетной вставки, можно просто подготовить заявление для одного набора, а затем цикл по списку, чтобы выполнить его с различными параметры. Такова формулировка подготовленных заявлений. :) – mario
Глупый вопрос ... Выполняет ли цикл над подготовленным оператором выполнение нескольких запросов? Мне нужно убедиться, что я ограничиваю, как часто я попадаю в БД, и в этом запросе есть потенциально тысячи «партий». – Tim
Ваши данные попадают на сервер в любом случае. С помощью подготовленного оператора вы просто передадите данные с несколькими пакетами, а не с одним длинным блоком данных, потребляющим кучи памяти на обоих концах. Просто используйте транзакцию для имитации одной партии. – mario