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

У меня есть следующие отношения с базой данных:

|--------| |-----------------| |-------|
| Groups | ------- 1.* | GroupMembership | *.1------- | Users |
|--------| |-----------------| |-------|

У меня есть идентификаторы групп в группах, идентификаторы пользователей в "Пользователи" и оба члена группы, что создает отношения между группами и пользователями.

Одна запись в GroupMembership выглядит так:

GroupID | UserID | datetime

У меня есть публикация массива из формы, которая выглядит так:

["members"]=> array(5) { 
 [0]=> "175" 
 [1]=> "113" 
 [2]=> "122" 
 [3]=> "80" 
 [4]=> "161"
}

Каждое значение (175, 113 и т.д.) Является идентификатором пользователя. Мне нужно вставить новую строку в таблицу GroupMembership для каждого идентификатора в этом массиве. Как можно достичь такой задачи, не выбивая задницу из базы данных и ресурсов серверов?

Заранее спасибо!

1 ответ

Четыре оператора INSERT не собираются убивать ваш сервер. Вот что вы можете сделать:

["members"]=> array(5) { 
 [0]=> "175" 
 [1]=> "113" 
 [2]=> "122" 
 [3]=> "80" 
 [4]=> "161"
}

$db = new PDO('mysql:host=localhost;dbname=yourdbname', $user, $password);
$statement = $db->prepare("
 INSERT INTO GroupMembership(GroupID, UserId) VALUES (
 :__group_id,
 :__user_id
 )
 ");

$statement->bindParam(':__group_id', $DEFAULT_GROUP_ID, PDO::PARAM_INT);
$statement->bindParam(':__user_id', $user_id, PDO::PARAM_INT);
for($i = 0; $i < count($members); $i++) {
 $user_id = $members[$i];
 $DEFAULT_GROUP_ID = <your_group_id>
 $statement->execute();
}
</your_group_id>

версия mysqli

$mysqli = new mysqli('localhost', 'my_user', 'my_password', 'my_db');
$stmt = $mysqli->prepare("
 INSERT INTO GroupMembership(GroupID, UserId) VALUES (
 ?,
 ?
 )
 ")
for($i = 0; $i < count($members); $i++) {
 $user_id = $members[$i];
 $stmt->bind_param('ii', $DEFAULT_GROUP_ID, $user_id);
 $stmt->execute();
}
$stmt->close();

licensed under cc by-sa 3.0 with attribution.