2013-02-21 2 views
-1

임 실행 코드를 잘못를 rowCount()를 반환PDO는 SELECT 문 다음과 유사한

// second select 
$query = $link->prepare(" 
      SELECT id FROM table 
      WHERE name = ?;"); // should return 0 rows 

$param = 'bar'; 

$query->bindParam(1, $param); 
$query->execute(); 
echo $query->rowCount(); // displays 1 (?????) 

내 테이블 :

id | name 
--------- 
1 | foo 

난 몰라 알다.

+2

그냥 찌르는 것 - 나는 당신이 SQL 문 끝에 세미콜론이 필요하다고 생각하지 않는다. – Raad

+1

btw이면 2 회의 실행 사이를 준비 할 필요가 없습니다. 묶는 것만. 그것이 그 아이디어입니다. –

+0

@YourCommonSense 나는 한개의 코드 블록에 2 개의 예제를 보여 주었다. – Kamil

답변

1

일부 데이터베이스가 SELECT 문에 의해 반환 된 행의 수를 반환 할 수 있습니다. 그러나이 동작은 모든 데이터베이스에 대해 보장되지 않으므로 의존해서는 안됩니다. Manual 다음 쿼리와 같이 COUNT(*)fetchColumn()을 사용하여 rowCount()을 에뮬레이트 할 수 있습니다.

$query = $link->prepare("SELECT COUNT(*) FROM table WHERE name = ?"); 
$param = 'bar'; 
$query->bindParam(1,$param); 
$query->execute(); 
// Check the number of rows that match the SELECT statement 
if($query->fetchColumn() == 0) { 
    echo "No records found"; 
}else{ 
     $query = $link->prepare("SELECT id FROM table WHERE name = ?") 
     //Etc 
} 
+0

감사합니다. 이미 COUNT와 (과) 비슷한 검색어가 있습니다. – Kamil

1

bindParam 메서드는 잘못되었으므로 변수 또는 변수 이름이 필요합니다. 대신 bindValue을 사용하고 싶다면 사용했던 리터럴 값이 필요합니다.

매뉴얼 참조 :

+0

내 응용 프로그램에서 거기에 변수를 바인딩했습니다. 나는 코드 예제를 단순화하려고 노력했고 거기에 문자열을 넣었다. 어쨌든, 나는 값으로 bindParam을 호출해서는 안된다는 것을 알지 못했다. 감사. – Kamil