Ver Mensaje Individual
  #1 (permalink)  
Antiguo 07/03/2014, 06:28
matiD
 
Fecha de Ingreso: octubre-2008
Mensajes: 85
Antigüedad: 15 años, 7 meses
Puntos: 0
Como usar transacciones Mysql?

Como están?

Tengo una duda en relación a las transacciones y utilizarlas en PHP, principalmente no se como hacerlo correctamente jaja.

Les comento como para entrar en contexto.

Tengo una tabla ordenesdetrabajo, que por ejemplo contiene
Código:
id, idcliente, descripción, marca, modelo, precio
Luego tengo una tabla movimientos que contiene
Código:
idordendetrabajo, fechayhora, movimiento
movimiento tiene por default 1 que sería (orden aceptada)

y probablemente también deba actualizar otra tabla más que se relaciona con la orden de trabajo.

Que pasa, cuando un usuario carga una orden, debo cargar en ambas tablas datos que se relacionan perfectamente.

Es decir el movimiento asentado, debe contener el último ID que se ingreso en la tabla ordenes ya que el primer movimiento se carga automáticamente al crearse la orden. Luego los siguientes movimientos no hay problema porque se cargaran manualmente pero el primer movimiento se carga automático al cargarse la orden. Además de que en un primer momento no puedo saber que ID se le asignará a la orden.

en el Foro MySQL me indicaron que para este tipo de cargas debo utilizar Transacciones y para la inserción de movimientos utilizo LAST_INSERT_ID() y listo, de esta forma podre hacerlo sin peligro de que se carguen 2 movimientos a la misma orden. Si es que 2 usuarios están utilizando el sistema al mismo tiempo.

Bien acá viene mi duda Como se utilizan las transacciones en PHP? se como ejecutar una carga, y luego otra pero como anidarlas en una transacción.

indivicualmente haría lo siguiente
Código PHP:
$this->_con = new mysqli(DB_HOSTDB_USUARIODB_PASSWORDDB_DATABASE);
$sql 'INSERT INTO ordenesdetrabajo (idcliente, descripción, marca, modelo, precio) VALUES (?, ?, ?, ? ,?)';
$this->_stmt $this->_con->prepare($sql)
$this->_stmt->bind_param('isssd'$idcliente$descripcion$marca$modelo$precio);
$this->_stmt->execute(); 
y para movimientos
Código PHP:
$this->_con = new mysqli(DB_HOSTDB_USUARIODB_PASSWORDDB_DATABASE);
$sql 'INSERT INTO ordenesdetrabajo (idordendetrabajo, fechayhora) VALUES (last_insert_id(), now())';
$this->_con->query($sql)
$this->_con->close(); 
Como podría hacer correctamente esto con transacciones para evitar problemas si 2 estamos cargando una orden al mismo tiempo?

Desde ya muchas gracias a todos!