PDO を使用して Out パラメーターを使用してストアド プロシージャを呼び出す
PDO を使用したストアド プロシージャの呼び出しは、シームレスなプロセスです。ただし、out パラメーターを指定せずにストアド プロシージャを利用しようとすると、次のような謎のエラーが表面化する可能性があります。
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
解決策: PDO の特殊性
Delving into the Depths PDO マニュアルとそれに付随する議論により、PDO のプリペアド ステートメント機能内の異常が明らかになります。問題の核心は、ストアド プロシージャ内での out パラメータの処理にあります。
この問題を修正するには、特定の回避策が必要です。
$stmt = $db->prepare("CALL SomeStoredProcedure(?, ?)"); $stmt->execute(array($someInParameter1, $someInParameter2));
代替アプローチ
もう 1 つのオプションは、ストアド プロシージャの後に out パラメータを取得する SELECT ステートメントを含めるようにストアド プロシージャを変更することです。実行:
CALL SomeStoredProcedure($someInParameter1, $someInParameter2, @someOutParameter); SELECT @someOutParameter;
この変更されたアプローチは、MySQL 内でストアド プロシージャを直接呼び出すときに観察される動作を模倣します。
これらの回避策を採用することで、次のような out パラメーターを使用したストアド プロシージャの呼び出しに関連する謎のエラーが発生します。 PDO が消滅し、シームレスな実行と out パラメータ値の取得が可能になります。
以上がOut パラメーターを使用してストアド プロシージャを呼び出すと、PDO が「OUT または INOUT 引数 ... は変数ではありません」というメッセージをスローするのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。