ホームページ > データベース > mysql チュートリアル > Out パラメーターを使用してストアド プロシージャを呼び出すと、PDO が「OUT または INOUT 引数 ... は変数ではありません」というメッセージをスローするのはなぜですか?

Out パラメーターを使用してストアド プロシージャを呼び出すと、PDO が「OUT または INOUT 引数 ... は変数ではありません」というメッセージをスローするのはなぜですか?

Patricia Arquette
リリース: 2024-11-08 06:58:02
オリジナル
1160 人が閲覧しました

Why Does PDO Throw

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 サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート