Foros del Web » Programando para Internet » PHP »

consultar dentro de una transaccion con PDO

Estas en el tema de consultar dentro de una transaccion con PDO en el foro de PHP en Foros del Web. Hola a todos, estoy usando PDO para raelizar mis inserciones y ahora que estoy usando la transaccion me gustaria saber de que manera puedo realizar ...
  #1 (permalink)  
Antiguo 02/06/2013, 10:32
 
Fecha de Ingreso: abril-2009
Ubicación: Colombia
Mensajes: 949
Antigüedad: 15 años, 7 meses
Puntos: 27
consultar dentro de una transaccion con PDO

Hola a todos, estoy usando PDO para raelizar mis inserciones y ahora que estoy usando la transaccion me gustaria saber de que manera puedo realizar una consulta y usar un resultado de esa consulta dentro de la transaccion

Yo lo hago asi pero no se si con PDO sea la forma corecta:

Código PHP:
Ver original
  1. $db=conectar();
  2. $db2=conectar();
  3. $codigo_modulo=$_POST['codigo_modulo'];
  4. try {
  5.  
  6. $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  7. $db->beginTransaction();
  8. for($i=1; $i<=$ciclo; $i++):
  9.  if($_POST['chk_selected_usuario'.$i]==1):
  10.    $sql="select * from sigca_matriculas_mdl where cod_mod='".trim($codigo_modulo)."' and cod_est='".$_POST['id_usuario'.$i]."'";
  11.      $query = $db2->query($sql);
  12.       if($query->rowCount()==0):
  13.       $row = $query->fetch(PDO::FETCH_BOTH);
  14.       $db->exec("insert into sigca_matriculas_mdl values ('".$codigo_modulo."', '".$_POST['id_usuario'.$i]."', '".$row[0]."', 'GRUPO1')");
  15.      endif;
  16.   endif;
  17. endfor;
  18. $db->commit();
  19. }catch (Exception $e) {
  20.                      $db->rollBack();
  21.                      echo "Error: " . $e->getMessage();
  22.                    
  23.                }

Si observan dentro del ciclo for hago una consulta y el $row[0] lo uso en la linea del exec ...
Asi esta bien, o hay alguna forma de hacer la consulta dentro del exec ?
Espero me puedan dar una indicación, soy nuevo usando PDO y hasta ahora empiezo a usar el beginTransaction() de PDO, muchas gracias
  #2 (permalink)  
Antiguo 02/06/2013, 13:34
Avatar de repara2  
Fecha de Ingreso: septiembre-2010
Ubicación: München
Mensajes: 2.445
Antigüedad: 14 años, 2 meses
Puntos: 331
Respuesta: consultar dentro de una transaccion con PDO

Puedes obtener el valor que obtienes en la select con otra select dentro del insert, pero esto no tiene nada que ver con PHP. Consulta un tutorial de MySQL, no es difícil pero supongo que el código se vuelve un poco más complicado de entender.
SAlu2
__________________
Fere libenter homines, id quod volunt, credunt.
  #3 (permalink)  
Antiguo 04/06/2013, 06:57
 
Fecha de Ingreso: abril-2009
Ubicación: Colombia
Mensajes: 949
Antigüedad: 15 años, 7 meses
Puntos: 27
Respuesta: consultar dentro de una transaccion con PDO

Te refieres a hacer un insert into select ??


Lo que sucede es que yo tengo que consultar un numero consecutivo que sirve como llave en un tabla...

Es decir tengo que consultar el maximo numero de una tabla, aumentarlo en 1 y luego ese numero aumentado en 1 insertarlo en otra tabla y obviamente actualizarlo en la tabla padre....Ahi tengo el problema, cuando la tabla este vacia, en mysql no se puede hacer un select isnull(max(campo), 1) from mi_tabla
  #4 (permalink)  
Antiguo 04/06/2013, 08:23
Avatar de Reedyseth  
Fecha de Ingreso: enero-2009
Ubicación: Chihuahua, México
Mensajes: 419
Antigüedad: 15 años, 9 meses
Puntos: 36
Respuesta: consultar dentro de una transaccion con PDO

Mira estas usando PDO de una manera muy explicita, no digo que este mal, sin embargo es mejor hacer las cosas un poco mas simple.

Dos puntos que quiero tocar contigo:

1.- rowCount() no es algo que quieras usar, no es muy estable por que algunas base de datos no lo soporta, utiliza un count en tu select y extrae el resultado.

2.- El insert que haces esta bien, sin embargo estas malgastado todo el framework y por alguna de las razones que fue creado. Te explico, en tu consulta estas concatenando valores como se hacia en los viejos tiempo con una conexion mysql normal, esto era causa de muchas inyecciones a las base de datos. PDO integro una manera para evitar esto y proteger las consultas con algo que se llama ligar parametros (binding parameters). Si has manejado Java estaras familiarizado, es algo como:

Código PHP:
Ver original
  1. $db->prepare("insert into sigca_matriculas_mdl values (?, ?, ?, ?)");
  2. $db->execute(array($codigo_modulo,$_POST['id_usuario'.$i],$row[0],'GRUPO1'));

Con estos puntos espero haberte ampliado un poco mas tu panorama de PDO, si aun tienes preguntas no dudes en responder.

Saludos.
__________________
Reedyseth
Te ayudo? No olvides dar un +
blog:http://behstant.com/blog
En el blog:Tutoriales de Desarrollo Web PHP, Javascript, BD y más.
  #5 (permalink)  
Antiguo 04/06/2013, 11:56
 
Fecha de Ingreso: abril-2009
Ubicación: Colombia
Mensajes: 949
Antigüedad: 15 años, 7 meses
Puntos: 27
Respuesta: consultar dentro de una transaccion con PDO

Pero en las transacciones de PDO se puede usar el prepare ??

Mirando los ejemplos de la pagina http://php.net/manual/es/pdo.transactions.php

Veo que usan es exec....no tengo idea de como usar entonces el prepare dentro de la transaccion...

Yo he realizado transacciones con SQL SERVER y las hago asi:

Código SQL:
Ver original
  1. BEGIN TRANSACTION
  2. BEGIN TRY
  3.  
  4. DECLARE @VARIABLE CHAR(10)
  5.  
  6. UPDATE MI_TABLA SET CONSECUTIVO=CONSECUTIVO+1  WHERE CONDICION= 'X' SET @SOSORDSER=( SELECT CONSECUTIVO FROM MI_TABLA  WHERE CONDICION ='X')
  7.  
  8. SET @VARIABLE=REPLICATE ( '0' ,10-LEN(@VARIABLE))+@VARIABLE
  9.  
  10. INSERT INTO MI_TABLA2 VALUES (@VARIABLE, 'X', 'Y', 'Z')
  11.  
  12. //ACA LO DE DEMAS Y EL FIN DE LA TRANSACCION

Si observan la transaccion, primero actualizo, luego consulto con la variable @VARIABLE y esa misma variable me sirve para insertar dentro de la transaccion, éstos mismo es posible hacerlo con PDO?...de que forma ??
  #6 (permalink)  
Antiguo 04/06/2013, 23:29
Avatar de Reedyseth  
Fecha de Ingreso: enero-2009
Ubicación: Chihuahua, México
Mensajes: 419
Antigüedad: 15 años, 9 meses
Puntos: 36
Respuesta: consultar dentro de una transaccion con PDO

Debe de funcionar por que la final de cuentas estas usando el objeto que creas con PDO, lo que hace las transacciones es solamente eliminar el autocommit para poder usar commit() y rollback().
__________________
Reedyseth
Te ayudo? No olvides dar un +
blog:http://behstant.com/blog
En el blog:Tutoriales de Desarrollo Web PHP, Javascript, BD y más.

Etiquetas: consultar, pdo, select, sql
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:07.