2010-01-14 3 views
3

이 문제는 간단한 수정이어야하며이 오류가 나타나는 이유를 부분적으로 이해하고 있지만이를 수정하는 방법을 알지 못합니다. 나는 문서를 살펴 봤지만 버퍼링 된 쿼리 옵션을 사용하는 것 이외의 해결책을 찾을 수 없습니다. 나는 그것을 시도했지만 효과가 없습니다.PDO 버퍼되지 않은 다른 쿼리가 활성화되어있는 동안 쿼리를 실행할 수 없습니다.

오류 : 다른 버퍼링 쿼리가 오류가 나는 $ 결과 배열을 구축하고있는 라인에서 오는

를 활성화하는 동안 PDO 쿼리를 실행할 수 없습니다.

foreach($phones as $phone) 
{ 
    $stmt = db::getInstance()->prepare("CALL phones(:phone)"); 
    $stmt->bindParam(':phone', $phone, PDO::PARAM_INT, 10); 
    $stmt->execute(); 

    $result[] = db::getInstance()->query("SELECT @phone;")->fetchAll(PDO::FETCH_ASSOC); 
} 
+0

OUT 매개 변수를 사용하지 않는 이유가 있습니까? – VolkerK

+0

예, 출력 매개 변수는 단일 행을 출력하기위한 것이기 때문에 가능합니다. 제 경우에는 여러 행이 필요합니다. – Jim

+0

프로 시저에서 결과 세트를 "리턴"할 수 있습니다. – VolkerK

답변

-1

의는 예를 들어 테이블을 보자

CREATE TABLE foo (
    id int auto_increment, 
    phone int, 
    primary key(id), 
    unique key(phone) 
) 

예를 들어 절차

delimiter // 
CREATE PROCEDURE phones(in p INT) 
BEGIN 
    SELECT phone FROM foo WHERE phone > p; 
END// 
delimiter ; 

및 결과 세트를 가져올 것이 가능 PDOStatement를 사용

INSERT INTO foo (phone) VALUES (1),(2),(3),(4),(5) 

일부 샘플 데이터 일부터 전자 저장 프로 시저. result set: 2 | 3 | 4 | 5 |

(테스트 환경 : PHP 5.3.1/WINXP, MySQL은 5.1.37)

$pdo = new PDO('mysql:host=localhost;dbname=test', 'localonly', 'localonly'); 
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
$stmt = $pdo->prepare("CALL phones(:phone)"); 
$stmt->bindParam(':phone', $phone); 
$phone = 1; 
$stmt->execute(); 
do { 
    echo "\nresult set: "; 
    while($row=$stmt->fetch()) { 
    echo $row['phone'], " | "; 
    } 
} while($stmt->nextRowset()); 

를 인쇄 do { } while($stmt->nextRowset()); 루프는 아마뿐만 아니라 당신의 "원래"문제를 해결

.

+0

테스트 환경까지. :) 남자. Volker 노력에 감사드립니다. 내가하고있는 일이 뭐든간에 확실히 결함이있어. 나는 당신의 모범을 보았고 그것은 효과가 있습니다. 그것은 내가 필요로하는 바로 그 것이다. 그래서 내가해야할 일은 내 코드를 너의 것과 비교해서 내가 어디로 잘못 가고 있는지를 보는 것이다. 제 느낌은 제 문제가 제 절차에 있고, 반드시 PHP가 아니란 것입니다. 당신의 노력에 감사드립니다, 정말 저를 도왔습니다! – Jim

+0

문제가 여전히 "다른 버퍼되지 않은 쿼리가 활성화되었습니다."오류 인 경우'$ stmt-> execute()'바로 뒤에 while ($ stmt-> nextRowset()) {}'을 시도하십시오. 모든 "활성"결과 세트를 지우거나 비우기/해제해야합니다. – VolkerK

+0

동일한 'do-while'문을 내 코드와 함께 사용했지만 XAMPP 컴퓨터에서이 기능을 사용할 수 없다는 오류가 발생했습니다. 어떤 제안? – JM4

관련 문제