PDO / MySQL / PHP - 我的查询结果被缓存的问题

时间:2012-08-29 02:24:29

标签: php mysql pdo

我几乎可以肯定我的查询正在被缓存。这是一个SELECT语句。

以下是一个示例情况。目前有2个挂单。我有一个脚本,在主页上显示挂单通知,通知仓库是否有新订单。我下了一个订单来测试“2”是否会更新为“3”而它没有。我认为我的查询正在被缓存,因为当我从phpMyAdmin运行查询时它显示“3”但是当通过PHP运行时它只显示“2”。有任何想法如何解决这个问题或禁用特定查询的缓存?

这是我的原始代码

<?php
if( protectThis("1, 2") ) :
$pending = $conn->query("SELECT count(*) FROM orders WHERE `status` =0");
$pending2 = $pending->fetch();
$pendingcount = count($pending2);
if ($pendingcount > 0) {
?>
<div class="orange warning">
    <p>
        <strong>Pending Order Notification</strong>
        <br />There are currently <strong><?php echo $pendingcount; ?></strong> pending orders.
        <br /><a style="color:white;margin-top:10px;" class="btn btn-inverse" href="orders_pending.php"><i>Click here to view them.</i></a>
    </p>
    <div class="shadow-out"></div>
</div>
<?php
}
endif;

我在尝试禁用特定查询的缓存后尝试更改查询,并尝试了以下内容

SELECT SQL_NO_CACHE count(*) FROM orders WHERE `status` =0

显然这也不起作用。

我不知道该怎么做。 :\

非常感谢任何帮助。


“编辑1”

$pending = $conn->query("SELECT count(*) FROM orders WHERE `status` =0");
// $pending2 = $pending->fetch();
// $pendingcount = count($pending2);
$pendingcount = $pending->rowCount();
if ($pendingcount > 0) {

2 个答案:

答案 0 :(得分:3)

我认为你在计算错误的方法。试试var_dump($pending2)。我想你会得到这个输出:

array(2) {
  [0]=>
  int(3)
  ["COUNT(*)"]=>
  int(3)
}

$pending2是一个包含查询返回的唯一行的数组,唯一的列由列名和0索引列号索引。任何单行结果集都是这样的,如果你count它,它将始终输出2

所以不要这样:

$pendingcount = count($pending2);

你应该用这个:

$pendingcount = $pending2[0];

答案 1 :(得分:2)

如果您只想要计数值,可以使用PDO::fetchColumn方法。

$pendingcount = $conn->query("SELECT count(*) FROM orders WHERE `status` =0")
                     ->fetchColumn();