Frage

Ich habe eine Webseite (läßt es A.html nennen). A.html hat einige Javascript, das die Seite in einer dynamischen PHP-Seite schaltet (läßt es B.php nennen), mit einem einfachen document.location = "B.php" . B.php führt eine Abfrage mysql auf der Grundlage der Cookies es sieht, und gibt ein Ergebnis auf dem mysqli- basiert> affected_rows variabel. Doch jedes Mal die Seite schaltet mysqli-> affected_rows gleich 0 ist, auch wenn die MySQL-Tabelle die Art und Weise verändert bekommt es soll. Interessanterweise, wenn ich gehe direkt zu B.php die URL-Leiste (oder aktualisieren Sie die Seite), dann mysqli-> affected_rows 1, wie es angenommen hat, sein.

bei wireshark Sehen, der einzige Unterschied zwischen den beiden GET-Anfragen ist, dass die zweite (nicht-javascript) eine eine Linie hat mit Cache-Control: max-age = 0 . Weiß jemand, warum dies alles beeinflussen, und wenn es einen Weg gibt, kann ich dieses Problem beheben?

EDIT: Heres' der Code

    $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();
War es hilfreich?

Lösung 3

War das nicht ein Problem mit dem Cache überhaupt. Das Problem stellt sich in diesem speziellen Fall, weil die gleiche Zeile aktualisiert wird, kurz bevor dieser Code ausgeführt wird, und es gibt nicht genug Zeitverzögerung für NOW (), anders zu sein. So, während der Zeilen Streichhölzer, gibt es keine Änderung in den Daten so $ mysqli-> affected_rows ist immer noch gleich Null ist. $ mysqli-> info zeigt, dass "Rows matched: 1, Zeilen geändert: 0".

Andere Tipps

Wenn es in der Tat der Cache Ihr Gebräu Säuerung, dann denke ich tun

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

wird das Problem lösen. Können Sie überprüfen und überprüfen, ob es das ist?

Sie zeigen keinen Code, so kann ich nur raten, aber affected_rows() wird NULL an einem Update zurück, die etwas in der Tabelle ändert sich nicht. Also vermutlich, wenn Sie Ihre Seite neu zu laden, wird die zweite Last zeigt 0 auch wenn das Update durchläuft auf der Seite vor.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top