質問

私は1つのウェブページを持っています(それをa.htmlと呼びましょう)。 a.htmlには、単純なPHPページ(B.Phpと呼びましょう)にページを切り替えるJavaScriptがいくつかあります。 document.location = "b.php". 。 b.phpは、表示されるCookieに基づいてmysqlクエリを実行し、mysqli-> riffected_rows変数に基づいて結果を返します。ただし、MySQLテーブルが想定どおりに変更されていても、ページがmysqli-> rifected_rowsに切り替わるたびに0に等しくなります。興味深いことに、URLバーを使用してB.PHPに直接移動すると(またはページを更新)、mysqli-> riffected_rowsは1つです。

Wiresharkを見ると、2つのGETリクエストの唯一の違いは、2番目の(nonjavascript)に1行があることです。 キャッシュコントロール:MAX-AGE = 0. 。なぜこれが何かに影響するのか、そしてこれを修正できる方法があれば誰も知っていますか?

編集:ヘールのコード

    $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();
役に立ちましたか?

解決 3

キャッシュの問題はまったくありませんでした。この特定のケースでは、このコードが実行される直前に同じ行が更新されており、今()が異なるために十分な時間遅延がないため、問題が発生します。したがって、行が一致している間、データに変更がないため、$ mysqli-> thefected_rowsはまだゼロに等しくなります。 $ mysqli->情報は、「行が一致している:1、行の変更:0」を示しています。

他のヒント

それが確かにあなたの醸造物を苦しめるキャッシュであるなら、私はやっていると思います

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

問題を解決します。それがそれかどうかを確認して確認できますか?

あなたはコードを表示していないので、私は推測することしかできませんが affected_rows() テーブル内の何も変更しないアップデートでnullを返します。おそらく、ページをリロードすると、2番目の負荷が表示されます 0 更新が以前にページで実行されたとしても。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top