Comunidad de diseño web y desarrollo en internet online

MYSQL_AFFECTED_ROWS, duda existencial

Citar            
MensajeEscrito el 07 Jun 2013 03:52 pm
Gente, como están.
Quisiera hacer una consulta acerca de el uso de MYSQL_AFFECTED_ROWS en PHP para poder obtener las filas afectadas por el ultimo insert, update o delete.
Imaginemos el siguiente caso, se tiene una página bien concurrida, entonces por ahí muchos usuarios hacen uso de la BD y del os Scripts en PHP para el acceso y modificación.
Si un usuario está ejecutando el siguiente script

Insert ALGO y este algo no funciona por lo que affected rows sería = a cero.

En otro lado en el mismo milisegundo, un usuario hizo un update a OTRA TABLA y sí fue hecha con éxito


En el siguiente milisegundo, para el primer usuario se ejecuta
mysql_affected_rows($identifier)

Díganme. Mysql_affected_rows será igual a CERO (por el insert fallido), o se verá afectado el resultado por el milisegundo de coincidencia y mysql_affected_rows sería igual a 1 (o 2 o 3, o el número de filas affectadas por el update que hizo otro usuario)


porque de ser así la lógica para el primer usuario se vería afectada, ya que, según se inserte o no con éxito los datos que hizo el primer usuario, el sistema se comportará de una u otra forma (si mysql_affected_rows=0 se le reporta al usuario como fallido, si es >0 quizá se tenga que hacer un update a otra tabla asociada).

Esa es mi duda. Por favor espero me puedan ayudar, porque no encontré información al respecto en otro lado. Gracias.

Por dante13

1 de clabLevel



 

chrome
Citar            
MensajeEscrito el 07 Jun 2013 04:04 pm
El problema que planteas se llama "control de concurrencias". Es cuando dos o más procesos usan el mismo recurso.

No te preocupes, MySQL se encarga de controlar eso. En el caso que planteas, el proceso que hace el insert y este falla, MySQL informará que hubo 0 registros insertados independientemente de si otro proceso hace un update a la misma tabla.

Por DriverOp

Claber

2510 de clabLevel



 

opera
Citar            
MensajeEscrito el 07 Jun 2013 06:07 pm
Estás seguro?
Es decir, si yo hago un mysql_affected_rows despues incluso de que otro usuario hizo un update u otro insert a otra tabla o a la misma, me saldrá cero si el insert del primer usuario falló?
tú crees que podría reforzar eso usando transacciones? (BEGIN, COMMIT,ROLLBACK)

Gracias por tu respuesta.

Por dante13

1 de clabLevel



 

chrome
Citar            
MensajeEscrito el 07 Jun 2013 08:23 pm
Razonablemente seguro.

Por DriverOp

Claber

2510 de clabLevel



 

opera

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.