2010-12-20 49 views
1

我有一個網頁(讓我們稱之爲A.html)。 A.html有一些JavaScript將頁面切換到一個動態的PHP頁面(讓我們稱之爲B.php),使用一個簡單的document.location =「B.php」。 B.php根據它所看到的cookies運行一個mysql查詢,並返回一個基於mysqli-> affected_rows變量的結果。但是,每當頁面切換mysqli-> affected_rows等於0時,即使mysql表的確按照它應有的方式改變了。有趣的是,當我使用url欄(或刷新頁面)直接瀏覽B.php時,mysqli-> affected_rows是1,就像它應該是。緩存控制與mysqli-> affected_rows搞亂

查看wireshark,兩個GET請求之間唯一的區別是第二個(非javascript)有一個與緩存控制: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(); 

回答

0

根本不是緩存問題。出現這個問題的原因是,在這種特殊情況下,在執行此代碼之前正在更新同一行,並且NOW()的時間延遲不同。所以,當行匹配時,數據沒有變化,所以$ mysqli-> affected_rows仍然等於零。 $ mysqli-> info顯示「行匹配:1,行更改:0」。

0

你沒有表現出任何代碼,所以我只能猜測,但affected_rows()將在不更改表中的任何一個更新返回NULL。因此,假設您重新加載頁面,即使更新在頁面上運行過,第二次加載也會顯示0

2

如果它確實緩存發酸您的BREW,那麼我想這樣做

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

將解決這個問題。你可以檢查和確認是否是這樣嗎?

+0

試過你的解決方案,沒有工作。與以前相同的結果,當JavaScript更改頁面聲稱沒有行更改(即使他們有),當我只是刷新它工作正常 – 2010-12-20 00:39:26