Как вставить несколько записей в одну поездку в базу данных с использованием PDO?

У меня есть таблица 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)'); 

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

Related of "Как вставить несколько записей в одну поездку в базу данных с использованием PDO?"

Вы можете дать заполнителям любые имена, которые вы хотите, чтобы что-то вроде этого для вашего 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)); 

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