2016-08-23 3 views
1

나는 PDO 준비 문인 MySQL DB를 사용하여 쿼리를 실행하고 있습니다. 쿼리를 실행할 때 영향을받은 행의 수를 알 수있는 방법을 찾지 못했지만 rowCount()을 시도했지만 여전히 유용하지는 않습니다.준비된 PDO 문 사용

$stmt1 = $db->prepare("SELECT * FROM publications WHERE pub_journal = '$j' AND pub_issue = 'CURRENT'"); 
$stmt1->execute(); 

영향을받는 행의 수는 어떻게 찾을 수 있습니까?

+0

$ result = $ stmt1-> fetchAll(); $ count = count ($ result)를 사용하거나 $ count = $ stmt1-> rowCount()를 사용할 수 있습니다. – happymacarts

+5

그것은 준비된 문장을 사용하는 방법이 아닙니다. –

+0

또한 영향을받는 행이 어떻게 든 변경되었음을 의미합니다. SELECT 쿼리에 의해 행이 변경되지 않습니다. –

답변

0

rowcount()for DELETE, INSERT, or UPDATE statements과 같이 사용해야하며 경우에 따라 SELECT에 사용할 수도 있습니다. 당신이 할 수있는 일은하지만, 이것이다 :

$res = $stmt->fetchAll(); 
$count = count($res); 

그리고 $count 행의 수를 개최한다.

+0

'rowCount'는 MySQL을 사용하는 SELECT 문에서 작동합니다. –

+0

@ Don'tPanic은 기술적으로는 올바르지 만 문서 단위로는 모범 사례가 아닙니다. – WillardSolutions

+0

@ Don'tPanic 어쨌든 귀하의 의견을 인정하는 답변을 편집하십시오. – WillardSolutions

1

rowCount은 데이터베이스가 MySQL 인 경우 작동합니다. 당신을 위해 효과가 없다는 사실은 당신의 쿼리가 실패하거나 당신이 기대하는 행의 수를 리턴하지 않는다는 것을 나타냅니다. 대부분의 데이터베이스에 대한

, PDOStatement :: rowCount의()은 SELECT 문에 의해 영향을받는 행의 수를 반환하지 않습니다

PDO documentation 행의 수를 찾으려면 다음 방법을 제안한다. 대신 PDO :: query()를 사용하여 원하는 SELECT 문과 동일한 조건자를 사용하여 SELECT COUNT (*) 문을 실행 한 다음 PDOStatement :: fetchColumn()을 사용하여 반환 할 행 수를 검색하십시오.

이 준비된 문뿐만 아니라 PDO::query()와 함께 작동합니다.

COUNT(*) 또는 * (또는 더 나은, 필요한 특정 열의 목록) 중 하나가 될 수 있도록 원본 SQL을 템플릿으로 수정할 수 있습니다.

$sql = "SELECT %s FROM publications WHERE pub_journal = ? AND pub_issue = 'CURRENT'"; 

SQL에 ?이 있습니다. 문이 execute([$j]);으로 실행될 때 $j 변수가 바인딩 될 자리 표시 자입니다. 변수를 SQL 문자열 (예 : ...WHERE pub_journal = '$j'...)에 연결하면 준비된 명령문의 이점을 많이 얻지 못합니다. 당신이 할 수있는, 당신이 카운트 할 필요가 무엇이든 후

$count = $count_stmt->fetchColumn(); 

:이

, 당신은 준비하고 카운트 쿼리를 실행할 수 있습니다

$count_stmt = $db->prepare(sprintf($sql, 'COUNT(*)')); 
$count_stmt->execute([$j]); 

은 다음과 카운트를 얻을를 COUNT(*) 대신 원하는 열을 지정하여 실제 SELECT 쿼리를 실행하십시오.

$select_stmt = $db->prepare(sprintf($sql, '*')); 
$select_stmt->execute([$j]); 
+0

감사합니다 @EatPeanutButter, 그것은 나를 위해 일했습니다. 'Don'tPanic', 방금 쿼리를 처리하는 데 더 나은 방법을 제시했다고 생각합니다. 고마워, 난 사랑 Stackoverflow –