Intereting Posts

Несколько операторов mysql INSERT в одном запросе php

Является ли это законным?

$string1= "INSERT INTO....;"; $string1 .= "INSERT INTO....;"; $string1 .= "INSERT INTO....;"; mysql_query($string1) or die(mysql_error()); 

Для чего это стоит, и в зависимости от того, вставляете ли вы одни и те же данные в одни и те же таблицы, гораздо лучше вставить несколько значений с одной вставкой, например

 INSERT INTO a VALUES (1,23),(2,34),(4,33); INSERT INTO a VALUES (8,26),(6,29); 

Нет, mysql_query() позволяет только один запрос за раз.

Вы можете вставить несколько строк следующим образом:

 INSERT INTO table (col1, col2) VALUES (1, 2), (3, 4), (5, 6) 

От MySQL dev поддерживают MySQL dev forum

 INSERT INTO table (artist, album, track, length) VALUES ("$artist", "$album", "$track1", "$length1"), ("$artist", "$album", "$track2", "$length2"), ("$artist", "$album", "$track3", "$length3"), ("$artist", "$album", "$track4", "$length4"), ("$artist", "$album", "$track5", "$length5"); 

Поэтому вставка идет как обычно:

  • сначала именовать имя таблицы, где мы хотим вставить новую строку,
  • после чего имена имен столбцов в круглых скобках (Примечание: не требуется, если вы хотите вставить ВСЕ столбцы)
  • за которым следует имя ключа VALUES, а затем в круглых скобках выводятся значения, которые вы хотите вставить для нового ROW в приведенной выше таблице,
  • затем COMMA, а затем еще две пары круглых скобок с новыми значениями для новой строки в приведенной выше таблице
  • и это повторяется N раз, пока у вас есть данные для вставки.

Счастливая вставка нескольких значений с помощью инструкции ONE insert. 🙂

В общем, это правильный SQL, поскольку каждый оператор заканчивается точкой с запятой, но PHP не позволяет отправлять несколько запросов за раз, чтобы защитить от атак SQL-инъекций, которые могут использовать плохо написанный скрипт.

Вы все равно можете использовать синтаксис, например:

 INSERT INTO foo VALUES ('a1', 'b1'), ('a2', 'b2'); 

Пример копирования / вставки внутри функции и цикла (предположим, что $ ids – это массив)

 public function duplicateItem($ids) { if (isset($ids[0])){ //at least one item $sqlQuery = "INSERT INTO items (item_id, content) VALUES "; for($i=0; $i<count($ids); $i++) { if ($i == count($ids)-1){ $sqlQuery .= "(".$ids[$i][0].", '".$ids[$i][1]."');"; }else{ $sqlQuery .= "(".$ids[$i][0].", '".$ids[$i][1]."'),"; } } mysql_query($sqlQuery) or die('Error, insert query failed: '.mysql_error()); } } 

Нет. Они являются отдельными запросами и должны быть названы таковыми.

  INSERT INTO table (a,b) VALUES (1,2), (2,3), (3,4);