2012-02-11 2 views
0

이 SP를 사용하고 있는데, mysql workbench를 사용할 때 결과가 모두 나옵니다. PDO 출력 매개 변수 오류

CREATE PROCEDURE SP(IN _start INT,IN _end INT,INOUT _count INT) 
BEGIN 

    SET _count = (SELECT COUNT(*) FROM tbl); 

    SET @qry = CONCAT('select * from tbl limit ', _start, ',', _end); 

    PREPARE stmt FROM @qry; 
    EXECUTE stmt; 
    DEALLOCATE PREPARE stmt; 

END 

그러나 PDO와 함께 사용하여이 오류

$c=0; 
$stmt = $this->_dbc->getConnection()->prepare("CALL SP(0,10,:count)"); 
    $stmt->bindParam(":count",$c,PDO::PARAM_INT|PDO::PARAM_INPUT_OUTPUT,0); 
    $stmt->execute(); 
    return $c; 
PDOException' with message 'SQLSTATE[42000]: Syntax error or access violation: 1414 OUT or INOUT argument 3 for routine db22.SP is not a variable or NEW pseudo-variable in BEFORE trigger 

를 반환하지만

$this->_dbc->getConnection()->prepare("CALL SP(0,10,**:count**)"); 

변경에

$this->_dbc->getConnection()->prepare("CALL SP(0,10,@count)"); 

에 오류를 반환하지 않습니다,하지만 항상 무엇입니까 0으로 카운트.

  1. 카운트와 @ 카운트의 차이점은 무엇입니까?
  2. pdo를 통해 정확한 개수를 얻는 방법은 무엇입니까?
+0

': count'이 준비된 문에서 자리가 어떤 라이브러리에 의해 채워질 것입니다/데이터베이스와 대화 할 때 사용하는 언어 '@ count'는 데이터베이스 측 서버 변수입니다. '@ count'가 다른 쿼리에 의해 이전에 설정되지 않았다면, 그것은 null로 평가 될 것입니다. –

+0

하지만 나는 PHP 매뉴얼 준비 문에서 예제를 따랐다. 그들은 단지 placeholder를 사용하여 mysql 커서에서 반환 된 출력을 검색합니다. – DON

답변

2

다음과 같은 해결 방법을 수행 할 수 있습니다 당신은 여기에서 자세한 내용을 찾을 수 있습니다

$dbh = $this->_dbc->getConnection() 
$stmt = $dbh->prepare("CALL SP(0,10,@count)"); 
$stmt->execute(); 

$sql = "SELECT @count AS count"; 
$stmt = $dbh->prepare($sql); 
$stmt->execute(); 

을 : http://www.php.net/manual/en/pdo.prepared-statements.php#101993