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