Foros del Web » Programando para Internet » PHP »

Problema al ejecutar union de consultas sql

Estas en el tema de Problema al ejecutar union de consultas sql en el foro de PHP en Foros del Web. Tengo un numero X de registros que añadir a una tabla, y quiero juntar todas las sentencias "insert into" en una unica orden para ejecutarlas ...
  #1 (permalink)  
Antiguo 28/12/2005, 18:58
 
Fecha de Ingreso: julio-2005
Mensajes: 39
Antigüedad: 18 años, 8 meses
Puntos: 0
Problema al ejecutar union de consultas sql

Tengo un numero X de registros que añadir a una tabla, y quiero juntar todas las sentencias "insert into" en una unica orden para ejecutarlas a la vez, pero no lo consigo.

El codigo que tengo es el siguiente (he igualado todos los valores enviados por POST para simplificar):

Código PHP:
for($n=1$n<=$_POST['nreg']; $n++){
    
$sql2=$sql2."insert into car (car1, car2) values ('".$_POST['car1']."', '".$_POST['car2']."'); ";
    }
echo 
$sql2;
mysql_query("Begin");
$dato2=mysql_query($sql2) or die (no_graba());
mysql_query("Commit"); 
En el codigo anterior hago q me muestre el valor de $sql2 y lo que me devuelve es:

Código:
insert into car (car1, car2) values ('00001', '1'); insert into car (car1, car2) values ('00001', '1');
Ese código es perfectamente interpretable por un lector de sql (copio y pego en PHPMyAdmin y funciona), pero al ejecutarlo a traves del mysql_query algo falla pues me envia a la funcion "no_graba"

¿Alguna sugerencia al respecto? Gracias.
  #2 (permalink)  
Antiguo 29/12/2005, 06:12
Avatar de claudiovega  
Fecha de Ingreso: octubre-2003
Ubicación: Puerto Montt
Mensajes: 3.667
Antigüedad: 20 años, 5 meses
Puntos: 11
Seguramente phpmyadmin procesa cada insert por separado, pero no es posible hacer esto con mysql_query(), creo que por un tema de seguridad, inyeccion de sql especificamente.
  #3 (permalink)  
Antiguo 29/12/2005, 06:45
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Así es .. la función mysql_query() sólo puede ejecutar una sentencia SQL a la vez. (y phpMyadmin lo que hace es aplicar un "explode()" al caracter ; que es el separador de instrucciones SQL y las ejecuta una por una ...)

Reordena tu código para ejecutar una sentencia a la vez .. pero como usas transacciones inicia y termina la transacción fuera de tu bucle donde vas ejecutando las sentencias SQL por separado.
Código PHP:
mysql_query("Begin");
for(
$n=1$n<=$_POST['nreg']; $n++){ 
    
$sql2="insert into car (car1, car2) values ('".$_POST['car1']."', '".$_POST['car2']."'); "
    
$dato2=mysql_query($sql2) or die (no_graba()); 
    echo 
$sql2
    } 
mysql_query("Commit"); 
Por cierto .. si usas Mysql 4.1.x en adelante con PHP 5.x en adelante puedes usar el nuevo "cliente" y nueva "extensión" de PHP para mysql. Me refiero a:

mysqli_xxxx() funciones de la extensión mysqli
www.php.net/mysqli

Con esas nuevas funciones .. ahora si que se pueden lanzar várias consultas SQL en una llamada a msqli_query()

Un saludo,
  #4 (permalink)  
Antiguo 29/12/2005, 06:59
 
Fecha de Ingreso: julio-2005
Mensajes: 39
Antigüedad: 18 años, 8 meses
Puntos: 0
Muchas gracias a los dos.
Veía que el problema tenia que estar en mysql_query() pero no me imaginaba q el phpmyadmin usara un explode y pensé que en php tendría que poder ahcerse igual.

Cluster, ya cambie el bucle, aunque echaré un ojo a las versiones en el servidor para ver si utilizo mysqli_xxxx() (no tenía ni idea de esto, asi que aprovecharé para investigar más)

Salud!
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 19:52.