2015-10-07 114 views
-2

我有一個很大的問題!我開發了一個PHP腳本,它使用很多查詢來插入,選擇和刪除MySQL數據庫中的值。我從來沒有任何問題,直到現在。現在它開始顯示昨天的數據。如果我通過PHP運行INSERT查詢,它會顯示真實數據,但如果我再次訪問該頁面或任何其他數據,它仍會顯示昨天的數據。查詢並不複雜,只是一些SELECT * FROM table和簡單的INSERT查詢。我認爲有些東西使用緩存來運行查詢。PHP或MySQL緩存查詢

我試過SQL_NO_CACHE,但結果相同。

一個簡單的代碼示例,從昨天返回數據。

$sql = "SELECT SQL_NO_CACHE * FROM persoane"; 
$query = mysqli_query($db_conx, $sql) or die(mysqli_error($db_conx)); 

它可能是什麼?

以後編輯:

有我的網頁上的一個此腳本:

include_once("php_includes/check_login_status.php"); 
include_once("php_includes/db_conx.php"); 
include_once("php_includes/functii.php"); 
$sql = "SELECT * FROM persoane WHERE status='a' ORDER BY nume"; 
$query = mysqli_query($db_conx, $sql); 
$data = date("d-m-Y"); 

if(isset($_POST['orainceput'])){ 
    $persid = $_POST['prezpersid']; 
    $ora = $_POST['orainceput']; 
    $nota = $_POST['notaprez']; 
    $autor = $_SESSION['user']; 

    $psql = "INSERT INTO prezente (persoana_id, data, ora_inceput, autor, nota) VALUES ('$persid', NOW(), '$ora', '$autor', '$nota')"; 
    $pquery = mysqli_query($db_conx, $psql); 

} 

如果$_POST['orainceput']設置和查詢內部運行後,一切都運行得很好:它顯示什麼應該顯示。如果我刷新頁面,它會再次顯示緩存的數據。我不明白!我從來沒有遇到這個問題!

+0

您是否已經驗證任何的嗎?例如。你檢查了新記錄在那裏的數據庫嗎?如果清除瀏覽器緩存會發生什麼情況? –

+0

嗨!是的,數據在數據庫中,如果我清除瀏覽器緩存,我會得到相同的結果。我並不是在談論瀏覽器緩存,原因很簡單:我的客戶打電話給我,告訴我這個問題,我去了應用程序,也看到了。我在想服務器端緩存。 – Sergiu

+0

您是否創建了一個重現此行爲的最小應用程序? –

回答

0

我懷疑它是一個瀏覽器緩存。正確/不正確的行爲之間的一個顯着區別是GET與POST請求。其中:

  • HTTP POST請求不可緩存;和
  • HTTP GET是可緩存的。

根據您用於測試的瀏覽器,它可能會實施非常積極的緩存方法。我建議嘗試匿名模式,或者清除瀏覽器中的所有緩存並嘗試重新加載頁面。也嘗試不同的瀏覽器是一種選擇。

最重要的是,我會檢查Web服務器配置,以確定哪些額外的HTTP標頭正在發送到客戶端以及是否有緩存相關的標頭。

+0

嗨!我沒有說它是一個瀏覽器緩存。我也很懷疑,因爲客戶打電話給我並告訴我這個問題,我去了網頁並看到了這一點。我正在考慮PHP或MySQL緩存(任何類型的服務器端緩存)。 POST的問題是,我運行後,一切正常,它顯示它應該顯示的內容。正確的數據(例如新條目)存儲在數據庫中...但不顯示。 – Sergiu

0

由於HTTP協議本身是無狀態的,並且每次頁面加載時都會啓動一個新的PHP線程,它不會緩存任何用戶數據,除非您告訴它執行此操作(例如:寫入/讀取查詢到/從數據訪問層中的文件查詢的結果)。 MySQL可以緩存查詢結果,但當相關表接受任何改變表格的CRUD/DML操作時,查詢緩存條目將被自動清除。

從MySQL的文檔:

如果表中的更改,使用該表變爲無效,並從緩存移除所有緩存查詢。這包括使用映射到已更改表的MERGE表的查詢。一個表可以被許多類型的語句改變,例如INSERT,UPDATE,DELETE,TRUNCATE TABLE,ALTER TABLE,DROP TABLE或DROP DATABASE。

緩存應該位於應用程序和瀏覽器之間:瀏覽器本身,代理等,或者在應用程序中實現。檢查您的應用程序及其運行的環境。

更多參考