Foros del Web » Programando para Internet » PHP »

choque de usuarios en mysql

Estas en el tema de choque de usuarios en mysql en el foro de PHP en Foros del Web. tengo una aplicacion php que registra usuarios pero algunass veces tratan de registrarse 2 usuarios en el mismo segundo y el resultado es variable: 1 ...
  #1 (permalink)  
Antiguo 14/12/2010, 02:53
 
Fecha de Ingreso: diciembre-2010
Mensajes: 2
Antigüedad: 13 años, 11 meses
Puntos: 0
choque de usuarios en mysql

tengo una aplicacion php que registra usuarios pero algunass veces tratan de registrarse 2 usuarios en el mismo segundo y el resultado es variable:

1 solo se registra el primero en la base de datos y a los dos les aparece registro exitoso.

2 solo se registra el segundo en la base de datos y a los dos les aparece registro exitoso.

3 no se registra ninguno en la base de datos y a los dos les aparece registro exitoso.

como evitarlo???

he estado buscando acerca del uso de microtime en javascript pero no encuentro nada para php

uso xp 32bits
y xampp

gracias por su ayuda
  #2 (permalink)  
Antiguo 14/12/2010, 05:51
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: choque de usuarios en mysql

El problema no se resuelve por PHP sino en la tabla y/o en la base en general.
1) El campo es username debe declararse como UNIQUE, de esa forma sólo admitirá un único valor para cada user.
2) Deberías usar transacciones, de modo de poder generar un bloqueo de espera mientras un registro se está insertando. De ese modo el segundo usuario sólo podría comenzar a insertarse cuando el otro haya terminado y no al mismo tiempo. Esto requiere el uso de tablas InnoDB en MySQL.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Etiquetas: duplicados, javascript, microtime, mysql, perdidos, registros, xampp
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 12:30.