Является ли это законным?
$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");
Поэтому вставка идет как обычно:
Счастливая вставка нескольких значений с помощью инструкции 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);