【问题标题】:Delayed update in ZenCart DatabaseZenCart 数据库延迟更新
【发布时间】:2014-02-04 16:27:24
【问题描述】:

我在一个自定义页面中进行编码,该页面预计将与 zen-cart 数据库进行交互。我在我的自定义页面中包含了所有必要的 php 文件。我也有自己的表“工作”,不时更新。

global $db;
global $zc_cache;

$job_row = $globalHelper->getJob(1);
var_dump($job_row);

$today = date("Y-m-d H:i:s", strtotime(date("d.m.Y H:i:s")));
$query = "UPDATE job SET processedon='" . $today . "', status= 4 WHERE id = 1";
$db->Execute($query);

$job_row = $globalHelper->getJob(1);
var_dump($job_row);
unset($job_row);

令我惊讶的是,运行第三个查询并没有给我更新的数据,而是在第二个查询之前给我的数据。也试过 $zc_cache->sql_cache_flush_cache();但没用!我从 configure.php 关闭了缓存。谁能告诉我这背后的原因?

【问题讨论】:

    标签: php mysql zen-cart


    【解决方案1】:

    我遇到了同样的问题,希望我所做的以下研究能有所帮助:

    我检查了 queryFactory 类代码,似乎 $db->Execute 是 $db->query 函数的某种包装器。如果之前已经缓存了查询,那么 $db->query 将从 $queryCache 对象中读取查询结果。

    $db->query 函数只是完全忽略了 $db->Execute 函数中的 $zf_cache 参数,并且它没有任何参数来控制是否读取缓存。

    $queryCache 是类 query_cache 的一个实例, $zc_cache 是类缓存的一个实例

    这两个类之间没有任何关系,我认为这就是 $zc_cache->sql_cache_flush_cache() 不起作用的原因。

    $db-> 查询仅在 $queryCache 对象未设置时才执行新查询。我猜你必须关闭配置中的缓存才能使其“未设置”。

    如果你仍然想要全局缓存,但在一些特殊查询上不需要缓存,我想你可以采用最老式的方式,使用 mysql_query();

    这听起来很愚蠢,但我懒得找到更好的解决方案,这就是我正在做的事情。

    grrrrrrrrrrr

    【讨论】:

    • 你是对的!如果我第二次运行我的查询并在前一个查询中稍作更改,我会得到更新的记录。
    猜你喜欢
    • 2012-03-06
    • 2021-10-10
    • 1970-01-01
    • 2023-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多