Foros del Web » Programando para Internet » PHP »

Uso del Select for update

Estas en el tema de Uso del Select for update en el foro de PHP en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 12/05/2009, 12:58
 
Fecha de Ingreso: agosto-2006
Mensajes: 61
Antigüedad: 13 años, 7 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
  #2 (permalink)  
Antiguo 18/05/2009, 10:18
 
Fecha de Ingreso: agosto-2006
Mensajes: 61
Antigüedad: 13 años, 7 meses
Puntos: 0
Respuesta: Uso del Select for update

Hola!
Alguien que me pueda orientar con este tema
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 07:23.