-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 に答える