mysqli-> riffected_rowsをめぐるキャッシュコントロール
-
11-10-2019 - |
質問
私は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
更新が以前にページで実行されたとしても。