PHP或MySQL缓存查询

时间:2015-10-07 10:55:49

标签: php sql caching

我有一个很大的问题!我开发了一个PHP脚本,它使用许多查询来插入,选择和删除MySQL数据库中的值。我从来没有遇到任何问题,“直到现在。现在它开始显示昨天的数据。如果我通过PHP运行INSERT查询,它会显示真实数据,但如果我再次访问该页面或其他任何页面,它仍会显示昨天的数据。查询并不复杂,只有一些crypto_box_keypair和简单SELECT * FROM table查询。我认为有些东西使用缓存来运行查询。

我尝试了INSERT,但结果相同。

从昨天返回数据的简单代码示例。

SQL_NO_CACHE

它可能是什么?

LATER EDIT:

我的一个页面上有这个脚本:

$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); } 并且在运行查询后,一切正常:它显示应显示的内容。如果我刷新页面,它会再次显示缓存的数据。我不明白!我从未遇到过这个问题!

2 个答案:

答案 0 :(得分:0)

我怀疑它是一个浏览器缓存。正确/不正确行为之间的一个显着差异是GET与POST请求。其中:

  • HTTP POST请求不可缓存;和
  • HTTP GET可缓存。

根据您用于测试的浏览器,它可能会实施非常积极的缓存方法。我建议尝试匿名模式,或者只是清除浏览器中的所有缓存并尝试重新加载页面。也可以尝试不同的浏览器。

最重要的是,我会检查Web服务器配置,以确保向客户端发送了哪些额外的HTTP标头以及是否存在与缓存相关的标头。

答案 1 :(得分:0)

由于HTTP协议本身是无状态的,并且每次加载页面时都会启动一个新的PHP线程,它不会缓存任何用户数据,除非你告诉它要做(例如:写/读取结果查询进出数据访问层中的文件的信息。 MySQL可以缓存查询结果,但是当相关表接受任何更改表的CRUD / DML操作时,会自动清除查询缓存条目。

来自MySQL doc:

  

如果表发生更改,则使用该表的所有高速缓存查询都将变为无效并从高速缓存中删除。这包括使用映射到已更改表的MERGE表的查询。可以通过许多类型的语句更改表,例如INSERT,UPDATE,DELETE,TRUNCATE TABLE,ALTER TABLE,DROP TABLE或DROP DATABASE。

缓存应位于应用程序和浏览器之间:浏览器本身,代理等,或在应用程序中实现。检查您的应用程序及其运行环境。

进一步参考