![Antiguo](http://static.forosdelweb.com/fdwtheme/images/statusicon/post_old.gif)
12/05/2009, 12:58
|
| | Fecha de Ingreso: agosto-2006
Mensajes: 61
Antigüedad: 18 años, 6 meses Puntos: 0 | |
Uso del Select for update Hola a todos!
Estoy haciendo un sistema y requiero que al seleccionar un registro en la BD asegurarme de que otro select no lo va a tomar y realizar operaciones con el.
Investigue y encontre el Select for Update que evita que esto pase, con el siguiente ejemplo:
SELECT counter_field FROM child_codes FOR UPDATE;
UPDATE child_codes SET counter_field = counter_field + 1;
Yo lo implemente de la siguiente manera:
$result = mysql_query("SELECT * FROM $dbase WHERE ocupado='0' AND bloqueado='0' ORDER BY `time_ses` ASC LIMIT 1 FOR UPDATE");
Hago un par de operaciones:
if(! $result) return(array('errCode'=>"-1",'errDesc'=>"Error interno del sistema."));
$row = mysql_fetch_array($result);
$pid=$row['id'];
y después hago el update:
$result = mysql_query("UPDATE $dbase SET time_ses='$tc', ocupado='1' WHERE id='$pid' "); if(! $result) return(array('errCode'=>"-1",'errDesc'=>"Error interno del sistema."));
Mi duda es:
La manera en que lo realizo es correcta o tengo que implementar un esquema como el del ejemplo, es decir el select e inmediatamente el update?
¿Cómo puedo asegurarme que efectivamente mysql esta bloqueando el registro para evitar que alguien más lo seleccione?
Muchas Gracias de antemano por su tiempo.
Saludos |