私はしばらくの間 PDO を使用しており、インライン SQL の代わりにストアド プロシージャを使用するようにプロジェクトをリファクタリングしています。説明できないエラーが発生しました。PHP バージョン 5.3.5 と MySQL バージョン 5.0.7 を使用しています。
出力が機能する基本的なストアド プロシージャを取得しようとしています。ストアド プロシージャは次のとおりです。
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;
期待どおりに動作するため、PHP での呼び出し方法に問題があると思われますが、問題が何であるかを見つけることができないようです。マニュアルの指示に従っていますが、まだこのエラーが発生します。誰かが私が間違っている可能性があることを提案できますか? アドバイスをいただければ幸いです。どうもありがとう!