「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > Out パラメーターを使用してストアド プロシージャを呼び出すと、PDO が「OUT または INOUT 引数 ... は変数ではありません」というメッセージをスローするのはなぜですか?

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

2024 年 11 月 10 日に公開
ブラウズ:401

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 の特殊性

PDO マニュアルとそれに付随する議論を深く掘り下げると、PDO が準備した内部の異常が明らかになります。ステートメント機能。問題の核心は、ストアド プロシージャ内の out パラメータの処理にあります。

この問題を修正するには、特定の回避策が必要です。

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

代替アプローチ

もう 1 つのオプションには、ストアド プロシージャを変更して、取得する SELECT ステートメントを含める方法があります。ストアド プロシージャ実行後の out パラメータ:

CALL SomeStoredProcedure($someInParameter1, $someInParameter2, @someOutParameter); 
SELECT @someOutParameter;

この変更されたアプローチは、MySQL 内でストアド プロシージャを直接呼び出すときに観察される動作を模倣します。

これらの回避策を採用することで、PDO を使用した out パラメーターを使用したスト​​アド プロシージャの呼び出しに関連する謎のエラーが発生しなくなります。消散し、シームレスな実行と out パラメータ値の取得が可能になります。

最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3