PHP或MySQL缓存查询

PHP或MySQL缓存查询,php,sql,caching,Php,Sql,Caching,我有个大问题!我开发了一个PHP脚本,它使用许多查询从MySQL数据库中插入、选择和删除值。到现在为止,我从来没有遇到过任何问题。现在它开始显示昨天的数据。如果我通过PHP运行INSERT查询,它会显示真实的数据,但如果我再次转到该页面或任何其他页面,它仍然会显示昨天的数据。查询并不复杂,只是一些SELECT*fromtable和简单的INSERT查询。我认为有些东西使用缓存来运行查询 我尝试了SQL\u NO\u缓存,但结果相同 返回昨天数据的简单代码示例 $sql = "SELECT SQL

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

我尝试了
SQL\u NO\u缓存
,但结果相同

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

$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);

}

如果设置了
$\u POST['orainceput']
,并且在运行内部查询后,一切正常:它显示了应该显示的内容。如果刷新页面,它将再次显示缓存的数据。我不明白!我从来没有这个问题

我怀疑它是浏览器缓存。正确/错误行为之间的一个显著区别是GET与POST请求。其中:

  • HTTP POST请求不可缓存;及
  • HTTP GET是可缓存的
根据您用于测试的浏览器,它可能会实现非常激进的缓存方法。我建议尝试匿名模式,或者从浏览器中清除所有缓存,然后尝试重新加载页面。尝试不同的浏览器也是一种选择


除此之外,我还将检查web服务器配置,以确保向客户端发送哪些额外的HTTP头,以及是否存在与缓存相关的头。

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

从MySQL文档:

如果表发生更改,则使用该表的所有缓存查询都将无效并从缓存中删除。这包括使用映射到已更改表的合并表的查询。表可以由多种类型的语句更改,例如INSERT、UPDATE、DELETE、TRUNCATE table、ALTER table、DROP table或DROP DATABASE

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

进一步参考

  • 有关MySQL缓存的更多信息:
  • 有关HTTP缓存的详细信息:

嗨!我没说这是浏览器缓存。我也对此表示怀疑,因为客户打电话给我,告诉我这个问题,我去了网页也看到了。我在考虑PHP或MySQL缓存(任何类型的服务器端缓存)。这篇文章的问题是,在我运行它之后,一切正常,它显示了它应该显示的内容。正确的数据(如新条目)存储在数据库中。。。但未显示。您是否验证过这些内容?例如,您已经检查了数据库,是否有新记录?如果清除浏览器缓存会发生什么?嗨!是的,数据在数据库中,如果清除浏览器缓存,则得到相同的结果。我不是在谈论浏览器缓存,原因很简单:我的客户打电话给我,告诉我这个问题,我去应用程序那里也看到了。我在考虑服务器端缓存。你是否创建了一个复制这种行为的最小应用程序?是的,我创建了。同样的结果。但我设法解决了它,似乎是托管服务器的问题。正如我所说,它是从SQL缓存返回数据的。那么,当您验证数据库时,为什么没有看到缓存的结果呢?