내 쿼리가 캐시되고있는 것이 확실합니다. 이것은 SELECT 문입니다.PDO/MySQL/PHP - 내 쿼리 결과가 캐싱되는 문제가 발생했습니다.
다음은 예제 상황입니다. 현재 보류중인 주문이 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
어느 한 쪽.
나는 무엇을해야할지 모르겠다. : \
도움을 주시면 감사하겠습니다.
"EDIT 1"
$pending = $conn->query("SELECT count(*) FROM orders WHERE `status` =0");
// $pending2 = $pending->fetch();
// $pendingcount = count($pending2);
$pendingcount = $pending->rowCount();
if ($pendingcount > 0) {
굉장합니다. 그게 효과가 있었어. 자, 캐시되지 않도록 특정 쿼리를 설정할 수있는 방법이 있습니까? 등록 된 사용자 목록을 보여주는 또 다른 페이지가 있고 사용자를 추가했기 때문에 그는 1-2 시간 후부터 수많은 페이지가 새로 고침 될 때까지 목록에 나타나지 않았습니다. –
['SQL_NO_CACHE'] (http://dev.mysql.com/doc/refman/5.0/en/query-cache-in-select.html)은 사용하는 동안 작동해야합니다. 여전히 오래된 데이터가 표시되면 다른 데이터 일 수 있습니다. 아마 어떤 PHP 프레임 워크 나 브라우저일까요? – bfavaretto
어떤 이유에서인지 var_dump는 문자열이 아니며 –