반응형
나는 한동안 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
반응형
'MySql' 카테고리의 다른 글
MySQL Python MySQldb로 레코드가 있는지 확인하는 방법 (0) | 2021.01.21 |
---|---|
MySQL MySql : ORDER BY 부모 및 자식 (0) | 2021.01.21 |
MySQL이 빈 문자열을 NULL로 자동 변환 할 수 있습니까? (0) | 2021.01.21 |
MySQL 왜 varchar 대신 varbinary (0) | 2021.01.21 |
MySQL xampp mysql 명령 창으로 데이터베이스를 만들 수 없습니다. (0) | 2021.01.21 |
댓글