2015-05-04 3 views
0

Вот довольно простой PHP PDO фрагмент кода, который обращается к таблице MySQL с именем «Пользователи» и вставляет строки данных к нему с помощью подготовленного оператора и несколько привязок:одного запроса INSERT для нескольких записей с помощью Подготовленный о

$conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password); 

// prepare sql and bind parameters 
$stmt = $conn->prepare("INSERT INTO Users (firstname, lastname, email) 
VALUES (:firstname, :lastname, :email)"); 
$stmt->bindParam(':firstname', $firstname); 
$stmt->bindParam(':lastname', $lastname); 
$stmt->bindParam(':email', $email); 

// insert a row 
$firstname = "John"; 
$lastname = "Doe"; 
$email = "[email protected]"; 
$stmt->execute(); 

// insert another row 
$firstname = "Mary"; 
$lastname = "Moe"; 
$email = "[email protected]"; 
$stmt->execute(); 
.... 

Как видно, это связано с неопределенным количеством запросов, поскольку каждая вставка строки принимает собственный execute(). Я пытаюсь уменьшить количество запросов, и моя цель состоит в том, чтобы один цикл создавал один запрос INSERT для всех вставленных записей. Является ли это возможным? Без подготовленного заявления это очень легко, и я могу заставить его работать, но я потерялся с готовым.

+0

Вы хотите создать цикл, но только выполнить один запрос, зачем вам нужен цикл?! – Rizier123

+0

Использовать пакетную вставку http://stackoverflow.com/questions/15069962/php-pdo-insert-batch-multiple-rows-with-placeholders –

+0

@ Rizier123 Цикл не выполняет запрос, просто строит его. – TheLearner

ответ

0

Достаточно объединить строки с комой (,), чтобы действовать как один параметр.

$stmt->bindParam(':firstname', $firstname[0] . ',' . $firstname[1]); 
+0

Это дает вам одну строку с «Алисой, Боб, Чарльзом» ... – glglgl

Смежные вопросы