Pregunta

Tengo una página web (permite llamarlo A.html). A.html tiene algunos javascript que cambia la página de una página dinámica php (le llaman b.php), usando un simple document.location = "b.php" . B.php ejecuta una consulta MySQL basado en las cookies que ve, y devuelve un resultado basado en el mysqli-> affected_rows variable. Sin embargo, cada vez que la página se conmuta mysqli-> affected_rows es igual a 0, a pesar de que la tabla de MySQL no se ve modificado la forma en que se supone que. Curiosamente, cuando voy directamente a b.php utilizando la barra de URL (o actualizar la página) y luego mysqli-> affected_rows es 1, como se supone que debe ser.

Mirando Wireshark, la única diferencia entre las dos solicitudes GET es que la segunda (no javascript) uno tiene una línea con Cache-Control: max-age = 0 . ¿Alguien sabe por qué esto afectaría nada, y si hay alguna manera de solucionar este problema?

EDIT: Heres' el código

    $req = $mysqli->prepare('update users set sts=NOW() where i=? and sid=? and sip=? and NOW()-sts <= '.$authentication_timeout.';');
    if ($mysqli->error) {
        log_mysql_error($mysqli);
        die('Unexpected error:'.$mysqli->error);
    }
    $req->bind_param('sss',$uid,$sid,$_SERVER['REMOTE_ADDR']);
    $req->execute();

    print $mysqli->affected_rows;
    $req->close();
¿Fue útil?

Solución 3

¿No era un problema con la memoria caché en absoluto. El problema surge porque en este caso particular, la misma fila se actualiza justo antes de que se ejecute el código, y no hay suficiente tiempo de retardo para NOW () sea diferente. Así, mientras que los partidos de fila, no hay un cambio en los datos de manera $ mysqli-> affected_rows está siendo igual a cero. $ mysqli-> Información muestra que "Filas encontrados: 1, filas cambiadas: 0".

Otros consejos

Si es de hecho el agriar su cerveza caché, entonces creo que haciendo

document.location="B.php?nocache=" + new Date().getTime();

va a resolver el problema. Se puede comprobar y verificar si eso es todo?

Usted no está mostrando ningún código así que sólo puedo imaginar, pero affected_rows() devolverá NULL en una actualización que no cambia nada en la tabla. Por lo que presumiblemente, si vuelve a cargar la página, la segunda carga mostrará 0 incluso si la actualización corrió a través de la página anterior.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top