2014-10-02 2 views
2

MySql에서 여러 쿼리를 동시에 실행할 때 영향을받는 모든 행의 수를 얻으려면 어떻게해야합니까?MySql에서 여러 개의 명령문을 실행할 때 영향을받은 모든 행 수 얻기

나는 현재 다음과 같이 수행

$stmt = ' 
    update prodb set buyer = buyer+1 where userId = 1; 
    update prodb set seller = seller+1 where userId = 2; 
'; 

$update = $dbc->prepare($stmt); 

$update->execute(); 

$queryCount = $update->rowCount(); 

echo 'This is QueryCount '.$queryCount; 

하지만, 영향을받는 2 개 행이 비록 내가로만 1$queryCount를 얻을. 쿼리 수를 2으로 가져 오는 방법이 있습니까? 즉 첫 번째 진술의 수와 두 번째 진의 수? 여기에 영향을받는 행이 두 개 있다는 것을 확인할 수 있습니다.

저는 모두이 작업을 MySql PDO를 사용하고 있습니다.

+0

. 'rowCount()'는 실행 한 ** LAST ** 쿼리의 결과 만 가져옵니다. 두 개의 쿼리를 실행하는 경우 마지막으로 완료되는 것이 rowCount()가보고하는 행입니다. rowCount()는 본질적으로'mysql_affected_rows()'api 함수를 호출하고있다. –

+0

커서를 앞으로 나아가는 것에 대해 누군가가 말했습니다 ... 그것이 무엇인지 알 수 있습니까? – jmenezes

+0

커서를 사용하고 있지 않습니다. 저장 프로 시저에서만 사용할 수 있습니다. –

답변

2

https://dev.mysql.com/doc/refman/5.6/en/c-api-multiple-queries.html는 말한다 :

여러 결과 집합 또는 행 카운트 지표를 생성 할 수 있습니다 여러 문 문자열을 실행. 이러한 결과를 처리하는 것은 단일 명령문의 경우와 다른 접근법을 포함합니다. 첫 번째 명령문에서 결과를 처리 한 후에 더 많은 결과가 존재하는지 확인하고 필요한 경우 결과를 차례로 처리해야합니다. 다중 결과 처리를 지원하기 위해 C API에는 mysql_more_results()mysql_next_result() 함수가 포함됩니다.

PDO를 통해이를 수행하는 방법은 PDOStatement::nextRowset() 함수를 호출하는 것입니다.

다음은 예입니다. 첫 번째 쿼리에서 한 행을 삽입하고 두 번째 행에서 두 행을 삽입하는 다중 쿼리를 실행합니다.

$sql = "insert into foo() values() ; insert into bar() values(),()"; 

$stmt = $dbh->prepare($sql); 
$stmt->execute(); 

do { 
    echo "row count: ".$stmt->rowCount()."\n"; 
} while ($stmt->nextRowset()); 

출력 : 당신은 할 수 없습니다

row count: 1 
row count: 2 
+0

'do {} while'이 없으면'2' 만 필요하다고 가정 해 보겠습니다. 그게 가능할까요? – jmenezes

+0

물론, 그냥 rowCount()를 호출하고 nextRowset()을 호출 한 다음 rowCount()를 다시 호출하십시오. –

관련 문제