¿Es esto legal?Múltiples instrucciones mysql INSERT en una consulta php
$string1= "INSERT INTO....;";
$string1 .= "INSERT INTO....;";
$string1 .= "INSERT INTO....;";
mysql_query($string1) or die(mysql_error());
¿Es esto legal?Múltiples instrucciones mysql INSERT en una consulta php
$string1= "INSERT INTO....;";
$string1 .= "INSERT INTO....;";
$string1 .= "INSERT INTO....;";
mysql_query($string1) or die(mysql_error());
Por lo que vale la pena, y dependiendo de si está insertando los mismos datos en las mismas tablas, por ejemplo, it's much better to insert multiple values with the one insert
INSERT INTO a VALUES (1,23),(2,34),(4,33);
INSERT INTO a VALUES (8,26),(6,29);
Agradecimiento especial por la referencia a la página "Insertar velocidad". – SarathChandra
No. Son consultas separadas, y se deben llamar como tales.
No, mysql_query()
solo permite una consulta a la vez.
Puede insertar varias filas de esta manera:
INSERT INTO table (col1, col2)
VALUES (1, 2), (3, 4), (5, 6)
Éste es mejor: es importante especificar los nombres de los campos en los que está volcando los datos ! – itsricky
En general, eso es SQL válida ya que cada declaración termina con un punto y coma, pero PHP no permiten que se envíen más de una consulta a la vez, con el fin de protegerse de los ataques de inyección SQL que podrían explotar una guión mal escrito.
Puede seguir utilizando una sintaxis como:
INSERT INTO foo VALUES ('a1', 'b1'), ('a2', 'b2');
Desde el soporte dev MySQL 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");
Así insertar va tan normal como siempre:
Feliz inserción de valores múltiples con UNA instrucción de inserción. :)
ejemplo de copia/pegar dentro de una función y un bucle (supongamos $ IDS es un array)
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());
}
}
Es mejor evitar la concatenación. Use 'implode()'. vea esto [respuesta] (http://stackoverflow.com/a/780046/4040525) para más detalles. –
¿Por qué el uso de implode() es beneficioso en este caso? En la pregunta anterior, tenemos declaraciones SQL normales. En la respuesta, señala que hablan de una gran cantidad de texto (como 1000 insertos de textos grandes) y, sí, en ese caso es bueno para evitar la concatenación. –
Lo sé.Está bien usar concatenación aquí. Ayer noté las dos respuestas y pensé que era mejor usar 'implode()' como regla general. –
INSERT INTO table (a,b) VALUES (1,2), (2,3), (3,4);
he resuelto mi problema Ejecutar consulta múltiple en mi proyecto PHP usando este método mysqli [mysqli .multi-query.] (http://us2.php.net/manual/en/mysqli.multi-query.php) –