Как записать несколько строк в 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);
		}

Если я правильно понимаю, то сколько элементов в массиве, столько и запросов к базе данных.
Может можно сделать это одним запросом?
И нужно ли заменять это одним запросом?
  • Вопрос задан
  • 11640 просмотров
Решения вопроса 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);
}
что нужно исправить что бы работало?
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы