2012-08-29 2 views
0

내 쿼리가 캐시되고있는 것이 확실합니다. 이것은 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) { 

답변

3

난 당신이 길을 잘못 계산 생각합니다. 시도 var_dump($pending2). 난 당신이 출력을 얻을 것 같아요

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

$pending2 열 이름과 0 인덱스 열 번호 모두에 의해 인덱스에만 열이 쿼리가 반환하는 유일한 행을 포함하는 배열입니다. 단일 행 결과 집합은 다음과 같습니다. count 인 경우 항상 2이 출력됩니다. 그래서 그 대신이의

:

$pendingcount = count($pending2); 

는이를 사용한다 :

$pendingcount = $pending2[0]; 
+0

굉장합니다. 그게 효과가 있었어. 자, 캐시되지 않도록 특정 쿼리를 설정할 수있는 방법이 있습니까? 등록 된 사용자 목록을 보여주는 또 다른 페이지가 있고 사용자를 추가했기 때문에 그는 1-2 시간 후부터 수많은 페이지가 새로 고침 될 때까지 목록에 나타나지 않았습니다. –

+0

['SQL_NO_CACHE'] (http://dev.mysql.com/doc/refman/5.0/en/query-cache-in-select.html)은 사용하는 동안 작동해야합니다. 여전히 오래된 데이터가 표시되면 다른 데이터 일 수 있습니다. 아마 어떤 PHP 프레임 워크 나 브라우저일까요? – bfavaretto

+0

어떤 이유에서인지 var_dump는 문자열이 아니며 –

2

그냥 카운트 값을 원하는 경우에, 당신은 PDO::fetchColumn 방법을 사용할 수 있습니다.

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