-1

我几乎可以肯定我的查询正在被缓存。这是一个 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) {
4

2 回答 2

4

我认为你数错了。试试var_dump($pending2)。我猜你会得到这个输出:

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

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

所以代替这个:

$pendingcount = count($pending2);

你应该使用这个:

$pendingcount = $pending2[0];
于 2012-08-29T02:34:39.187 回答
2

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

$pendingcount = $conn->query("SELECT count(*) FROM orders WHERE `status` =0")
                     ->fetchColumn();
于 2012-08-29T02:39:06.813 回答