Foros del Web » Programando para Internet » PHP »

Que pasa si dos coinciden?

Estas en el tema de Que pasa si dos coinciden? en el foro de PHP en Foros del Web. Saludos, tengo una web en php que usa Mysql, y tiene bastante tráfico. En general funciona bastante bien, pero de vez en cuando hace un ...
  #1 (permalink)  
Antiguo 17/07/2008, 04:27
 
Fecha de Ingreso: febrero-2007
Mensajes: 58
Antigüedad: 17 años, 3 meses
Puntos: 0
Que pasa si dos coinciden?

Saludos, tengo una web en php que usa Mysql, y tiene bastante tráfico.

En general funciona bastante bien, pero de vez en cuando hace un estraño y mete malos valores a la BD, y yo creo que es cuando se juntan varios usuarios a un tiempo.

Mi pregunta es: ¿como funcionan los server cuando varios usuarios coinciden una pagina php? ¿es posible que se me mezclen las variables o sobreescriban?

Lo digo por si existe una forma para que las variables no se mezclen al coincidir varios usuarios, o si por el contrario eso es imposible y el problema viene de otro sitio, quizás del Mysql que no puede tragar varas ordenes a un tiempo, y en tal caso me pregunto que pasa si conciden 2 a la vez


Gracias
  #2 (permalink)  
Antiguo 17/07/2008, 05:06
 
Fecha de Ingreso: octubre-2004
Mensajes: 2.627
Antigüedad: 19 años, 6 meses
Puntos: 48
Respuesta: Que pasa si dos coinciden?

Normalmente los bloqueos de la base de datos funcionan bien. El unico problema es cuando haces un select (lectura) de un registro y luego un update (escritura) de ese mismo registro en funcion de los datos obtenidos en la lectura. En estos casos puede pasar que entre la lectura y escritura de un usuario se produzca una escritura en la base de datos por parte de otro usuario.

Los servidores web sirven las paginas a la vez a varios usuarios, asi que hay varios scripts PHP ejecutandose a la vez y ejecutando consultas a la base de datos. Los scripts no se mezclan entre si, pero todos trabajan contra la misma base de datos, escribiendo y leyendo los mismo datos.
  #3 (permalink)  
Antiguo 17/07/2008, 08:44
Avatar de desendoll  
Fecha de Ingreso: mayo-2008
Mensajes: 340
Antigüedad: 16 años
Puntos: 3
Respuesta: Que pasa si dos coinciden?

buenas;

lución ?? concurrencia o semáforos en PHP??
__________________
Francesc Jimenez
  #4 (permalink)  
Antiguo 17/07/2008, 08:54
 
Fecha de Ingreso: abril-2008
Ubicación: Montevideo - Uruguay
Mensajes: 156
Antigüedad: 16 años
Puntos: 5
Respuesta: Que pasa si dos coinciden?

Hi !

Algo que debes evitar es utilizar consultas del tipo:
Código PHP:
mysql_query("SELECT MAX(id_lolo) FROM lolos"$conexion);

mysql_query("DELETE FROM otros WHERE id_otro=".MAX(id_lolo)"); 
(Está mal escrita, pero es para que te des una idea)

Ese tipo de cosas puede producir que en el lapso en el que la base consulta por el id maximo y se lo asigna a otra cosa para Borrar, editar, o insertar lo que sea puede que otro usuario inserte un registro, y el id Maximo ya no sea el que devolvió la primer vez...

Espero te sea util!
-ByE-
__________________
--
Mi Portfolio Online! Visitalo!
--
  #5 (permalink)  
Antiguo 17/07/2008, 10:33
 
Fecha de Ingreso: febrero-2007
Mensajes: 58
Antigüedad: 17 años, 3 meses
Puntos: 0
Respuesta: Que pasa si dos coinciden?

Gracias.

Ahora que lo piense, quizás en determinadas ocasiones se produzca algo como lo que señalas, aunque sea dificil es posible, y según Murphy es lo que ocurre.

Supongo que la unica manera de evitarlo es hacer que al final al modificar los datos lo haga con un WHERE...todo los datos iniciales que deberia haber cogido, y si se han modificado no hará nada, ¿correcto?

Ya me queda claro que se ejecutan varios scripts a la vez de php y no los mezcla, e imagino que hasta que no se acabe uno no va al siguiente.

¿puede ser que mantenga los valores de las variables de una pagina a la otra?

Es decir, que si entra a una pagina y $fo=1, y al rato entra otro a otra pagina y usa el valor $fo coja el valor 1 de la otra página (sin haberse definido al inicio)
  #6 (permalink)  
Antiguo 18/07/2008, 01:05
 
Fecha de Ingreso: octubre-2004
Mensajes: 2.627
Antigüedad: 19 años, 6 meses
Puntos: 48
Respuesta: Que pasa si dos coinciden?

Cita:
imagino que hasta que no se acabe uno no va al siguiente.
No, se ejecutan a la vez, pero de forma aislada (hilos o procesos independientes). Desde el punto de vista del script, es como si se ejecutara el solo. Lo que no son independientos son los datos externos al script (sesiones, base de datos, ficheros, etc). Con esos datos si puede haber problemas de concurrencia.
Cita:
Es decir, que si entra a una pagina y $fo=1, y al rato entra otro a otra pagina y usa el valor $fo coja el valor 1 de la otra página (sin haberse definido al inicio)
No, cada ejecucion del script tiene su propia memoria independiente. El $fo de un script esta almacenado en una parte de memoria totalmente diferente al $fo de otro script.
Cita:
Supongo que la unica manera de evitarlo es hacer que al final al modificar los datos lo haga con un WHERE...todo los datos iniciales que deberia haber cogido, y si se han modificado no hará nada, ¿correcto?
Hombre, si ese funcionamiento es el que deseas, pues si. Otra solucion es implementar tu propio sistema de bloquos (semaforos) para evitar que alguien modifique algo que otro esta modificando. Por ejemplo, que un usuario no pueda abrir la pagina de editar registro si otro usuario esta ya en la pantalla de editar registro.
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 14:56.