Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » PostgreSQL »

Transacción con bucle (ciclo) con PostgreSQL y PHP-PDO

Estas en el tema de Transacción con bucle (ciclo) con PostgreSQL y PHP-PDO en el foro de PostgreSQL en Foros del Web. Cordial Saludo Actualmente estoy trabajando con PostgreSQL 8.4.8 conectado a PHP por medio de PDO, he realizado consultas de inserción (simple de un solo registro) ...
  #1 (permalink)  
Antiguo 12/07/2011, 09:23
 
Fecha de Ingreso: marzo-2009
Ubicación: Cali (Valle) - Colombia
Mensajes: 164
Antigüedad: 15 años, 1 mes
Puntos: 2
Transacción con bucle (ciclo) con PostgreSQL y PHP-PDO

Cordial Saludo

Actualmente estoy trabajando con PostgreSQL 8.4.8 conectado a PHP por medio de PDO, he realizado consultas de inserción (simple de un solo registro) como transacciones, la cual ha quedado de la siguiente manera:

Código:
$consulta = "INSERT INTO \"datosComercialesClientes\" (\"idCliente\", \"celular\", \"fax\", \"email\", \"diasPlazoCredito\", \"descuentoProntoPago\", \"descuentoComercial\", \"estadoRegistro\", \"creadoPor\", \"creadoEn\")
                    VALUES ($idCliente, NULL, NULL, '', NULL, NULL, NULL, '1', '$idCreador', 'now'::text::timestamp without time zone)";
        $guarda = $this->db->prepare($consulta);
        try {
            $this->db->beginTransaction();
            $guarda->execute();
            $this->db->commit();
            return true;
        } catch (PDOException $e) {
            $this->db->rollback();
            return false;
        }
más el registro que estoy guardando en el mismo formulario tiene relaciones de uno a muchos con otras entidades, mi pregunta puntual es ¿cómo podría "meter" (en la misma transacción) estas otras inserciones por medio de un bucle que recorra un array (donde estan los valores de las otras entidades)?, actualmente esto lo hago por medio de PHP y genero varias consultas de inserción, pero lo que considero ideal es que todas las inserciones queden en una misma transacción, para que se sumpla el primer principio ACID, es decir la atomicidad.

Quedo atento a sus comentarios.

Muchas gracias por su atención.
  #2 (permalink)  
Antiguo 12/07/2011, 13:32
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: Transacción con bucle (ciclo) con PostgreSQL y PHP-PDO

Porque no metes en un procedimiento desde postgresql todas las inserciones?
Las funciones y procedimientos en postgresql manejan transacciones implicitas.


saludos
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #3 (permalink)  
Antiguo 12/07/2011, 14:06
 
Fecha de Ingreso: marzo-2009
Ubicación: Cali (Valle) - Colombia
Mensajes: 164
Antigüedad: 15 años, 1 mes
Puntos: 2
De acuerdo Respuesta: Transacción con bucle (ciclo) con PostgreSQL y PHP-PDO

Hola huesos52, gracias por tu ayuda, sin embargo, ya lo solucioné, mi código quedo así:

Código:
$consulta = "INSERT INTO \"datosComercialesClientes\" (\"idCliente\", \"celular\", \"fax\", \"email\", \"diasPlazoCredito\", \"descuentoProntoPago\", \"descuentoComercial\", \"estadoRegistro\", \"creadoPor\", \"creadoEn\")
                    VALUES ($idCliente, NULL, NULL, '', NULL, NULL, NULL, '1', '$idCreador', 'now'::text::timestamp without time zone)";
        $guarda = $this->db->prepare($consulta);
        try {
            $this->db->beginTransaction();
            $guarda->execute();
            for ($i = 0; $i < count($this->_referenciaComercialCliente); $i++) {                   
                $consulta = "INSERT INTO \"referenciasComercialesClientes\" (\"idCliente\",\"referenciaComercialCliente\",\"montoCredito\",\"anosAntiguedad\",\"telefono\", \"estadoRegistro\", \"creadoPor\", \"creadoEn\")
                            VALUES ($idCliente, ?, ?, ?, ?, '1', '$idCreador', 'now'::text::timestamp without time zone)";
                $guarda = $this->db->prepare($consulta);
                $this->_montoCredito[$i] = str_replace(array(",", "$"), "", $this->_montoCredito[$i]);
                $guarda->execute(array($this->_referenciaComercialCliente[$i], $this->_montoCredito[$i], $this->_anosAntiguedadReferenciaComercial[$i], $this->_telefonoReferenciaComercial[$i]));
            }
            $this->db->commit();
            return true;
        } catch (PDOException $e) {
            $this->db->rollback();
            return false;
        }
Por si alguno tiene la misma duda, quizás le sea útil.

Última edición por GUILLHERMOSOFT; 13/07/2011 a las 10:26

Etiquetas: bucle, dato, insert, postgres, cliente, ciclos
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 14:58.