본문 바로가기
MySql

MySQL PDO를 사용하여 Out 매개 변수로 스토어드 프로 시저 호출

by 베이스 공부 2021. 1. 21.
반응형

나는 한동안 PDO를 사용해 왔으며 인라인 SQL 대신 저장된 procs를 사용하도록 프로젝트를 리팩토링하고 있습니다. 설명 할 수없는 오류가 발생합니다. PHP 버전 5.3.5 및 MySQL 버전 5.0.7을 사용하고 있습니다.

출력이 작동하는 기본 저장된 프로 시저를 얻으려고합니다. 저장된 proc은 다음과 같습니다.

DELIMITER //  
CREATE PROCEDURE `proc_OUT` (OUT var1 VARCHAR(100))  
BEGIN  
    SET var1 = 'This is a test';  
END //  

다음은 proc을 호출하는 데 사용하는 코드입니다. $ db는 PDO의 인스턴스입니다.

$stmt = $db->prepare("CALL proc_OUT(?)");
$stmt->bindParam(1, $return_value, PDO::PARAM_STR, 4000); 

    // call the stored procedure
    $stmt->execute();
    echo $returnvalue;

간단 하지요? 그러나 다음 오류가 발생합니다.

exception 'PDOException' with message 'SQLSTATE[42000]: Syntax error or access violation: 1414 OUT or INOUT argument 1 for routine mydb.proc_OUT is not a variable or NEW pseudo-variable in BEFORE trigger

이렇게 proc을 직접 호출하면 :

CALL proc_OUT(@res);
SELECT @res;


 

해결 방법

 

여기에 버그가있는 것 같습니다. 내가 찾은 최고의 솔루션은 다음과 같습니다.


위 링크의 댓글에서 :

$dbh->query("CALL SomeStoredProcedure($someInParameter1, $someInParameter2, @someOutParameter)"); 
$dbh->query("SELECT @someOutParameter");

// OR, if you want very much to use PDO.Prepare(),
// insert "SELECT @someOutParameter" in your stored procedure and then use:

$stmt = $dbh->prepare("CALL SomeStoredProcedure(?, ?)"); 
$stmt ->execute(array($someInParameter1, $someInParameter2));


 

참조 페이지 https://stackoverflow.com/questions/13382922

 

 

반응형

댓글