2009-08-20 23 views
19

¿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()); 
+0

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) –

Respuesta

0

No. Son consultas separadas, y se deben llamar como tales.

33

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) 
+0

Éste es mejor: es importante especificar los nombres de los campos en los que está volcando los datos ! – itsricky

2

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'); 
10

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:

  • nombrar por primera vez el nombre de la tabla donde queremos insertar una nueva fila,
  • fol lowed nombrando nombres de las columnas que figuran entre paréntesis (Nota: No es necesario si desea insertar TODAS columnas),
  • seguido por VALORES nombre de la clave y luego entre paréntesis viene los valores que desea insertar de nuevo FILA en la tabla anterior,
  • seguido de COMA y luego otro par de soportes redondos con nuevos valores para nueva fila en la tabla mencionada anteriormente
  • y esto se repite N-veces más largo que tiene los datos a insertar.

Feliz inserción de valores múltiples con UNA instrucción de inserción. :)

2

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()); 

    } 
} 
+0

Es mejor evitar la concatenación. Use 'implode()'. vea esto [respuesta] (http://stackoverflow.com/a/780046/4040525) para más detalles. –

+1

¿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. –

+0

Lo sé.Está bien usar concatenación aquí. Ayer noté las dos respuestas y pensé que era mejor usar 'implode()' como regla general. –

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