2011-04-05 4 views
1

방금 ​​데이터베이스 연결을 변경했습니다. 나는 아직 PDO 수업이나 OOP에 익숙하지 않다. 나는이 쿼리에서 행의 수를 얻기 위해 노력하고PHP에서 PDO 클래스로 num_rows 문제가 발생했습니다

 $dsn = "mysql:host=" . DB_HOST . ";dbname=" . DB_NAME; 
     try 
     { 
      $this->db = new PDO($dsn, DB_USER, DB_PASS); 
     } 
     catch (Exception $e) 
     { 
      die ($e->getMessage()); 
     } 

: 어쨌든, 나는이 같은 DB에 연결하는 내 쿼리가 올 수 있도록 phpmyadmin에서

$ip = $this->ip(); 
    $sql = "SELECT `id` FROM `login_failed` 
      WHERE `ip` = :ip AND `time` BETWEEN NOW() - INTERVAL 120 MINUTE AND NOW() 
      LIMIT 3"; 
    try 
    { 
     $stmt = $this->db->prepare($sql); 
     $stmt->bindParam(':ip', $ip, PDO::PARAM_STR); 
     $result = $stmt->execute(); // $result = true 
     $n = $stmt->num_rows ; // n = NULL? 
     $stmt->closeCursor(); 
    }  
    catch (Exception $e) 
    { 
     die ($e->getMessage()); 
    } 

가 나는 결과를 얻을 수 있지만, $n 어떤 이유로 든 NULL입니다. 행 수를 얻으려면 어떻게해야합니까 PDO

답변

12

$stmtPDOStatement입니다. 이 클래스에는 num_rows 속성이 없습니다.

대신 rowCount 찾고있을 수도 있지만 그 설명서에 상태 :

는 관련 PDOStatement가 SELECT 문이었다 에 의해 실행 된 마지막 SQL 문이 일부 데이터베이스 의 수를 반환 할 수 있습니다 경우 행은에 의해 반환됩니다. 그러나이 동작은 모든 데이터베이스에 대해 보장되지 않으므로 휴대용 응용 프로그램의 경우 에 의존해서는 안됩니다.

길고 짧은을 당신이 실제로 SELECT 모든 데이터, 당신은 확실하게 결과 세트의 반복에 의해 반환 (또는 fetchAll를 호출 된 행 수를 확인하고 항목을 셀 수하고자하는 경우, 해당 경우 배열에서). 데이터가 아니라 번호 만 필요하면 대신 SELECT COUNT을 사용하십시오.

그래서, 쿼리를 변경하지 않고 행을 계산합니다 : 여전히 또한 행 개수 면책 조항을 포함하도록 관리하면서 나보다 더 빠른 것에 대해

$result = $stmt->execute(); 
$rows = $stmt->fetchAll(); // assuming $result == true 
$n = count($rows); 
+0

+1. – Charles

+3

@Charles : 고양이를 피하는 방법은 매우 다양합니다. * 매우 * 비슷합니다. 나는 너무 훈련 된 것에 대해서만 얻을 수있는 기회를 당신에게 upvote :) – Jon

관련 문제