Как записать несколько строк в mysql из массива php одним запросом?

Нужно каждый элемент массива записать в новую строку таблицы в базе данных.
Я умею так:
$array= array(1,2,3,4,5);

		foreach ($array as $key => $value){
		$query = "INSERT INTO `table` (`nomer`) VALUES ('$value');";
		$res = mysql_query($query);
		}

Если я правильно понимаю, то сколько элементов в массиве, столько и запросов к базе данных.
Может можно сделать это одним запросом?
И нужно ли заменять это одним запросом?
  • Вопрос задан
  • 11528 просмотров
Решения вопроса 2
Immortal_pony
@Immortal_pony Куратор тега PHP
$array= array(1,2,3,4,5);
$query = "INSERT INTO `table`(nomer) VALUES ";

foreach ($array as $i=>$value) {
	$query .= "({$value})";
	
	if ($i+1 < count($array)) {
		$query .= ", "
	}
} // Result query: INSERT INTO `table`(nomer) VALUES (1), (2), (3), (4), (5)

$res = mysql_query($query);


Что касается необходимости - для пяти значений, конечно, абсолютно все равно. Если же планируется какой-то более или менее нагруженный сервис, то для начала надо отказаться от использования функций, которые давно deprecated (mysql_*) и использовать PDO или mysqli
Ответ написан
AloneCoder
@AloneCoder
[object Object]
Можно, нужно
$array= array(1,2,3,4,5);
$query = "INSERT INTO `table` (`nomer`) VALUES (" . implode("), (", $array) . ")";
$res = mysql_query($query);
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@vdem
Как уже ответили выше, использовать лучше PDO, а не "родные" mysql_xxx() функции. Добавлю, что если вставлять нужно не только числовые данные (да и те, в предложенных примерах, лучше сначала принудительно привести к integer для защиты от SQL injection атак), но и строки, то сначала следует их экранировать с помощью PDO::quote().
Ответ написан
Комментировать
@Brahma96
Здравствуйте, у меня почти тоже самое только id статична например 22 а signs массив. по примеру ниже у меня записывает в таблицу только первое значение массива.
$signs = [ 0 => 1; 1 => 2; 2 => 3];
$id = 22;
for ($i = 0; $i < (count($signs)); $i++) {
$sql = "insert into product_signs (product_id, signs_id)
values ('$id', '$signs[$i]')";
mysqli_query(connect(), $sql);
}
что нужно исправить что бы работало?
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
YCLIENTS Москва
от 200 000 до 350 000 ₽
Ведисофт Екатеринбург
от 25 000 ₽
ИТЦ Аусферр Магнитогорск
от 100 000 до 160 000 ₽