1

私は 1 つの Web ページを持っています (A.html と呼びましょう)。A.html には、単純なdocument.location="B.php"を使用して、ページを動的な php ページ (B.php と呼びましょう) に切り替える JavaScript があります。B.php は、認識した Cookie に基づいて mysql クエリを実行し、mysqli->affected_rows 変数に基づいて結果を返します。ただし、mysql テーブルが想定どおりに変更されたとしても、ページが切り替わるたびに mysqli->affected_rows は 0 になります。興味深いことに、URL バーを使用して B.php に直接アクセスすると (またはページを更新すると)、mysqli->affected_rows は想定どおり 1 になります。

Wireshark を見ると、2 つの GET リクエストの唯一の違いは、2 つ目の (JavaScript 以外の) リクエストにCache-Control: 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();
4

3 に答える 3

2

それが実際にあなたの醸造物を酸っぱくするキャッシュである場合、私はそうしていると思います

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

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

于 2010-12-20T00:30:56.960 に答える
0

コードを表示していないので、推測することしかできaffected_rows()ませんが、テーブル内の何も変更しない更新では NULL を返します。おそらく、ページをリロードすると、0以前にページで更新が実行されていたとしても、2 回目の読み込みが表示されます。

于 2010-12-20T00:30:11.343 に答える
0

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

于 2011-11-18T22:46:56.033 に答える