Foros del Web » Programando para Internet » PHP » Frameworks y PHP orientado a objetos »

Duda con insert multiple y PDO.

Estas en el tema de Duda con insert multiple y PDO. en el foro de Frameworks y PHP orientado a objetos en Foros del Web. hola tengo que hacer un insert multiple con pdo , buscando encontre esta forma de hacerlo Código PHP: $stmt  =  $pdo -> prepare ( 'INSERT INTO foo VALUES(:a, :b, :c)' ...
  #1 (permalink)  
Antiguo 04/08/2011, 08:55
Avatar de RIVERMILLOS  
Fecha de Ingreso: marzo-2010
Mensajes: 1.336
Antigüedad: 14 años, 8 meses
Puntos: 15
Duda con insert multiple y PDO.

hola tengo que hacer un insert multiple con pdo , buscando encontre esta forma de hacerlo

Código PHP:

$stmt 
$pdo->prepare('INSERT INTO foo VALUES(:a, :b, :c)'); 
foreach(
$data as $item

    
$stmt->bindValue(':a'$item[0]); 
    
$stmt->bindValue(':b'$item[1]); 
    
$stmt->bindValue(':c'$item[2]); 
    
$stmt->execute(); 

Quisiera saber si es la unica forma de hacerlo? y si es una buena idea hacerlo asi.


saludos
  #2 (permalink)  
Antiguo 04/08/2011, 09:03
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años, 5 meses
Puntos: 1517
Respuesta: Duda con insert multiple y PDO.

Bueno hay muchas formas, pero la recomendada es usar prepare, para evitar inyecciones SQL. Si estás usando variables para añadir los datos, puedes usar bindParam. Ahora no sé si es requerible usar
Código PHP:
Ver original
  1. $stmt = $pdo->prepare('INSERT INTO foo VALUES(:a, :b, :c)');
dentro del foreach, no lo he tratado, pero con lo que haz posteado es una de las formas más recomendadas de usar. La otra que es similar es algo así
Código PHP:
Ver original
  1. $stmt = $pdo->prepare('INSERT INTO foo VALUES(?, ?, ?)');  
  2. foreach($data as $item)  
  3. {  
  4.     $stmt->bindParam(1, $item[0]);  
  5.     $stmt->bindParam(2, $item[1]);  
  6.     $stmt->bindParam(3, $item[2]);  
  7.     $stmt->execute();  
  8. }
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos

Última edición por abimaelrc; 04/08/2011 a las 09:12 Razón: error en el código
  #3 (permalink)  
Antiguo 04/08/2011, 09:06
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 5 meses
Puntos: 2135
Respuesta: Duda con insert multiple y PDO.

Es mejor hacer el prepare() fuera del foreach, porque eso lo que hace es compilar el SQL en el RDBMS y solo mandas el execute() y es mucho más rápido, hacerlo dentro del foreach() es similar a enviar una instrucción SQL por cada vuelta del ciclo, con lo cual es lento, y como son prepared statements lo hace aún más lento.

Saludos.
  #4 (permalink)  
Antiguo 04/08/2011, 09:49
Avatar de RIVERMILLOS  
Fecha de Ingreso: marzo-2010
Mensajes: 1.336
Antigüedad: 14 años, 8 meses
Puntos: 15
Respuesta: Duda con insert multiple y PDO.

Muchas gracias por la ayuda me aclararon la duda, pero tengo otra que tiene que ver con lo que dijiste de las sentencias sql en bucles, Digamos en ocacion donde uno tiene que hacer SELECT de una tabla que tiene relacion N:N (tres tablas) y quiero traer todas las relaciones que tenga un id especifico. algo asi.

Código PHP:
Ver original
  1. $query1="SELECT id,campo1,campo2 FROM tabla1 WHERE .....";
  2.  
  3. $res = ejecutar($query1);
  4.  
  5. while($ress = obtener_fila($res)){
  6.  
  7.       $query2=" SELECT tabla2.campo1,tabla2.campo2  From tabla2
  8.                                    INNER JOIN tabla_relacion
  9.                                    ON .....
  10.                                    WHERE tabla2.id=" . $ress->id;
  11.  
  12.       /** se ejecutar query2**/
  13.      
  14.  
  15. }


Existe algo con PDO para eso similar a los insert ?

saludos
  #5 (permalink)  
Antiguo 04/08/2011, 09:59
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 5 meses
Puntos: 2135
Respuesta: Duda con insert multiple y PDO.

Claro, puedes hacer los prepared statements de la misma manera y usar bindParam o bindValue y ejecutarlos, funciona tanto para SELECTS como INSERTS y DELETES.

Saludos.
  #6 (permalink)  
Antiguo 04/08/2011, 10:12
Avatar de RIVERMILLOS  
Fecha de Ingreso: marzo-2010
Mensajes: 1.336
Antigüedad: 14 años, 8 meses
Puntos: 15
Respuesta: Duda con insert multiple y PDO.

Y en cuanto a rendimiento es buena idea?

saludos
  #7 (permalink)  
Antiguo 04/08/2011, 10:36
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 5 meses
Puntos: 2135
Respuesta: Duda con insert multiple y PDO.

Sí, por la misma razón que expuse, el query se envía primero para ser preparado y luego se ejecuta cada vez.

Saludos.

Etiquetas: insert
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 23:29.