Как вставить несколько записей в одну поездку базы данных с помощью PDO? - PullRequest
6 голосов
/ 04 июня 2011

у меня есть таблица с именем propAmenities, которая содержит два столбца amenity_id и property_id, в основном таблица содержит внешние ключи.

теперь мне нужно сгенерировать запрос PDO, используя именованный заполнитель для приведенного нижезаявление.

INSERT INTO propAmenities (amenity_id, property_id) VALUES (1, 1), (2, 1), (3, 1)

я попытался использовать следующий синтаксис, но я не уверен, что это сработает.

$sth->$this->dbh->prepare('INSERT INTO 
                           propAmenities 
                           (amenity_id, property_id) 
                           VALUES 
                           (:amenity_id, :property_id), 
                           (:amenity_id, :property_id), 
                           (:amenity_id, :property_id)');

и для приведенного выше запроса я не уверен, как использовать PDObindParam ()?Как мне справиться с этой ситуацией, используя PDO?я использую неправильные заполнители PDO?

Ответы [ 2 ]

5 голосов
/ 04 июня 2011

Вы можете дать местозаполнителям любые имена, какие захотите, что-то вроде этого для вашего SQL:

INSERT INTO propAmenities 
(amenity_id, property_id) 
VALUES 
(:amenity_id1, :property_id1), 
(:amenity_id2, :property_id2), 
(:amenity_id3, :property_id3)

А затем:

$stmt->bindParam(':amenity_id1',  1);
$stmt->bindParam(':property_id1', 1);
$stmt->bindParam(':amenity_id2',  2);
$stmt->bindParam(':property_id2', 1);
$stmt->bindParam(':amenity_id3',  3);
$stmt->bindParam(':property_id3', 1);

Или, конечно, построить соответствующий массивдля execute.В этом случае с неназванными местозаполнителями может быть легче работать, хотя:

INSERT INTO propAmenities 
(amenity_id, property_id) 
VALUES 
(?, ?),
(?, ?),
(?, ?)

И тогда вы можете перебрать свои значения и вызвать execute с соответствующим массивом:

$stmt->execute(array(1, 1, 2, 1, 3, 1));
0 голосов
/ 04 июня 2011

Гораздо проще не использовать подготовленный запрос, просто сгенерировать строку запроса с помощью некоторых функций implode () и выполнить ее. Конечно, убедитесь, что ваши параметры указаны в кавычках (поскольку они целочисленные, достаточно применения intval ()).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...