Foros del Web » Programando para Internet » PHP »

Problema con cache mysql

Estas en el tema de Problema con cache mysql en el foro de PHP en Foros del Web. Buen dìa a todos, me está ocurriendo algo que nunca me había pasado. Hago una consulta SELECT a la BD en mysql y me devuelve ...
  #1 (permalink)  
Antiguo 21/10/2015, 12:05
Avatar de chronos682  
Fecha de Ingreso: febrero-2004
Ubicación: Tunja - Boyacá - Colombia
Mensajes: 627
Antigüedad: 20 años, 2 meses
Puntos: 69
Problema con cache mysql

Buen dìa a todos, me está ocurriendo algo que nunca me había pasado. Hago una consulta SELECT a la BD en mysql y me devuelve el valor correcto del campo, luego actualizo ese campo con otra consulta UPDATE y cuando vuelvo a consultar el mismo campo con la misma primera consulta SELECT en vez de mostrarme el nuevo dato me sigue mostrando el anterior, a pesar que en phpMyAdmin yo puedo comprobar que se actualizó el campo por el nuevo dato. Ya intenté utilizando SQL_NO_CACHE luego del SELECT, leí en otro sitio que al actualizar una tabla se borran todas las consultas alojadas en caché por lo cual actualicé un campo X de la tabla antes del SELECT pero tampoco funciona.

Este es el código que estoy utilizando:

Código PHP:
<?php
function GetLluvia($mysqli$user)
{
    
$sql "SELECT SQL_NO_CACHE Lluvia FROM usuarios WHERE ID={$user}";
    
$result $mysqli->query($sql) or die(mysqli_error());
    
$numrows $result->num_rows;
    if (
$numrows 0)
    {
        
$row $result->fetch_assoc();
        return 
$row['Lluvia'];
    }
}
function 
GuardarLluvia($mysqli$user,$svlluvia)
{
    
$sql "UPDATE usuarios SET Lluvia = '{$svlluvia}' WHERE ID={$user}";
    
$result $mysqli->query($sql) or die(mysqli_error());
    if (!
$result)                
    {
        echo 
"No se actualizo";
    }
}

$dblluvia=GetLluvia($mysqli,"1");
$gtlluvia=$_GET['lluvia'];

if (
$dblluvia != $gtlluvia)
{
    if (
$gtlluvia=='1')
    {
        
$text "Ha comenzado a llover.";
        
GuardarLluvia($mysqli$user,'1');
    }
    else
    {
        
$text "Ha dejado de llover.";
        
GuardarLluvia($mysqli$user,'0');
    }
}
?>
Se supone que si por la url se envía la variable lluvia y esta es diferente a la que está almacenada en la BD, debe actualizar el campo en la BD colocando el nuevo valor que llegó por GET y mostrar el mensaje correspondiente, el problema es que la siguiente vez que llega un dato por GET y consulta la BD, en vez de mostrar el nuevo dato sigue mostrando el anterior. No se si sea problema de programaciòn o de mysql por eso lo coloco aquí, si no es el sitio adecuado agradezco lo cambien al foro correspondiente.

Agradezco cualquier ayuda.
__________________
Si te gustó la respuesta dale +1

HERNÁN G. SIABATO M.
[email protected]
  #2 (permalink)  
Antiguo 21/10/2015, 12:13
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Problema con cache mysql

Sería bueno si pudieras hacer var_dump() de todos los valores que recibes así como los que obtienes de las consultas, lo digo porque es imposible ejecutar tu código mentalmente para saber lo que ocurre.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 21/10/2015, 12:24
Avatar de chronos682  
Fecha de Ingreso: febrero-2004
Ubicación: Tunja - Boyacá - Colombia
Mensajes: 627
Antigüedad: 20 años, 2 meses
Puntos: 69
Respuesta: Problema con cache mysql

Gracias por responder pateketrueke.
Supongamos que el campo Lluvia de la tabla usuarios es 0 al inicio.
Se envía por GET lo siguiente:

Código:
?lluvia=1
Si hago var_dump de la variable $gtlluvia me muestra esto:

Código:
string '1' (length=1)
Luego obtiene el valor de la BD y lo almacena en $dblluvia, si hago var_dump muestra:

Código:
string '0' (length=1)
Como los dos valores son diferentes almacena el nuevo valor que llegó a $gtlluvia en la BD. Ahí se acaba el código.

Si yo voy a phpMyAdmin y busco el campo Lluvia en la tabla usuarios dice 1 que fue el nuevo valor que llegó por GET.

Ahora, vuelvo y envío el dato por GET, p ej nuevamente 1:

Código:
?lluvia=1
Si hago var_dump de $gtlluvia me muestra:

Código:
string '1' (length=1)
Luego vuelvo y consulto el valor del campo Lluvia en la BD y lo almaceno nuevamente en $dblluvia y si hago var_dump me muestra:

Código:
string '0' (length=1)
A pesar que en la BD está almacenado 1 y lo puedo comprobar en el phpMyAdmin y por lo tanto vuelven a ser diferentes, me vuelve a mostrar el mensaje de que ha comenzado a llover y vuelve y actualiza la BD. Luego de pasarle varios 1 por la URL finalmente la consulta arroja 1, pero si le paso 0 pasa exactamente lo mismo.
__________________
Si te gustó la respuesta dale +1

HERNÁN G. SIABATO M.
[email protected]
  #4 (permalink)  
Antiguo 21/10/2015, 12:34
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Problema con cache mysql

Ya entiendo, y no considero que sea un problema de programación pues la lógica está bien escrita, además de que los var_dump() lo confirman.

Pero si el dato que a veces no es el más "fresco" proviene de la consulta a la BD entonces creo que es una pista de hacía dónde mirar.

Otra opción será el caché de tu navegador, ya que al final estás haciendo una petición GET y básicamente todos los navegadores van a tratar de guardar caché de ello.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #5 (permalink)  
Antiguo 21/10/2015, 13:07
Avatar de chronos682  
Fecha de Ingreso: febrero-2004
Ubicación: Tunja - Boyacá - Colombia
Mensajes: 627
Antigüedad: 20 años, 2 meses
Puntos: 69
Respuesta: Problema con cache mysql

He buscado en varias partes y encontré que haciendo FLUSH de la tabla se borraba el caché de mysql, en local funciona perfecto, puedo hacer el FLUSH y efectivamente funciona correctamente el script php, el problema es que en el servidor web no tengo permisos para hacer el FLUSH, no hay ninguna otra forma de borrar el caché de mysql?
__________________
Si te gustó la respuesta dale +1

HERNÁN G. SIABATO M.
[email protected]

Etiquetas: cache, mysql, select, sql, tabla, usuarios, variable
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 17:40.