2011-12-08 3 views
0

PHP PDO를 사용하여 쿼리를 실행하고 있습니다.PDO 쿼리는 행을 반환해야 할 때 0을 반환합니다.

protected function isStoreRegistered($name, $street1 ,$city, $country_id, $id) { 

if($id == '0') { 
    $sql = " SELECT a.name, b.street1, b.city, c.id 
      FROM tablea a 
      LEFT JOIN tableb b ON a.fk_addressID = b.id 
      LEFT JOIN tablec c ON b.fk_countryID = c.id 
      WHERE a.name = '$name' 
      AND b.street1 = '$street1' 
      AND b.city = '$city' 
      AND b.fk_countryID = '$country_id'"; 
    $result = $this->db->exec($sql); 
} else { 
    // some other query 
} 

return $result;  

}

MySQL로 전송되는 질의는 다음과 같습니다 :

SELECT a.name, b.street1, b.city, c.id 
FROM sl_store a 
LEFT JOIN sl_address b ON a.fk_addressID = b.id 
LEFT JOIN sl_country c ON b.fk_countryID = c.id 
WHERE a.name = 'test store' 
AND b.street1 = 'Weselsgate 2' 
AND b.city = 'Oslo' 
AND b.fk_countryID = 'NO' 

Runnign 두꺼비에서이 쿼리, 1 개 행을 반환 나는 다음과 같은 기능을 가지고있다.

하지만이 print_r(result)을 할 경우, 그것은 0 (영)

어떻게 여기에 어떤 문제가 있는지 알 수 출력? docs에서

+0

downvote로 갈 경우 최소한 이유를 적어주십시오. 네, 매뉴얼에서 SELECT 문에 대해 작동하지 않을 것이라고 분명하게 알았지 만, 그 순간의 순간에 잊어 버린 것이 었습니다. – Steven

답변

2

:

PDO :: 간부() SELECT 문에서 결과를 반환하지 않습니다.

아무 것도 수정하지 않으므로 (삽입, 삭제 또는 업데이트하지 않음) 영향을받는 행이 없습니다. 즉 PDO::exec이 반환합니다.

데이터에 준비된 문이나 PDO::query을 사용하려는 경우 당신이 행의 수를 원한다면 당신의 선택에서 카운트를 사용하십시오. 당신이 선택

문서를하고 있기 때문에

+1

아, 젠장, 네 말이 맞아. 나는 PDO :: exec()가 일반적인 쿼리라고 생각했다. 다른 코드를 배워서, 나는 단지 삽입, 삭제 및 업데이트를 위해 사용하고있다. – Steven

1

에 대한 몇 가지 독서를 보냈다 그리고 설명서에서 PDO::exec()SELECT 문의 결과를 반환하지 않습니다. 대신 다음을 시도해야합니다 (매개 변수 바인딩 참고).

protected function isStoreRegistered($name, $street1 ,$city, $country_id, $id) { 

if ($id == '0') { 
    $sql = " SELECT a.name, b.street1, b.city, c.id 
      FROM tablea a 
      LEFT JOIN tableb b ON a.fk_addressID = b.id 
      LEFT JOIN tablec c ON b.fk_countryID = c.id 
      WHERE a.name = :name 
      AND b.street1 = :street 
      AND b.city = :city 
      AND b.fk_countryID = :country"; 
    $stmt = $this->db->prepare($sql); 
    $vars = array(
    'name'  => $name, 
    'street' => $street1, 
    'city'  => $city, 
    'country' => $country_id, 
); 
    $result = $stmt->execute($vars); 
} else { 
    // some other query 
} 

return $result; 
+0

그래, 나는'PDO : exec'를 사용하여 조금 빠르다. 나는 여러 번 사용했지만 정상적인 SELECT에는 사용하지 않았습니다. 나는 당신이 여기서 제안한 방법을 사용하여 끝냈다 - 그것은 코드의 다른 문장에서도 마찬가지였다. 시간의 열에서 잊어 버려요. :) – Steven

관련 문제