PHP PDO で MySQL ストアド プロシージャから変数を取得する
この説明は、PHP を使用して MySQL ストアド プロシージャから変数を取得するための包括的なソリューションを提供することを目的としています。 PDO.
問題
PHP PDO で MySQL ストアド プロシージャから LAST_INSERT_ID() を取得しようとしているときに、実装されたコードが機能していないことが検出されました。
解決策
残念ながら、この問題は、OUT パラメータを使用した MySQL ストアド プロシージャの PHP の処理における長年のバグが原因である可能性があります。
複数ステップのプロセス
回避策には 2 段階のプロセスが含まれます:
変数を使用したプロシージャ呼び出し
提供された PHP コードで、問題のあるバインディングを次のものに置き換えます:
$stmt = $db->prepare("CALL simpleProcedure(:name, @returnid)");
これにより、PHP 変数 $name が入力パラメータにバインドされ、 @returnid という名前の MySQL 変数に出力を保存します。 @ 記号は、returnid が MySQL 変数であることを示します。
変数の選択
プロシージャの実行後、次のクエリを使用して @returnid 変数を取得します。
$result = $db->query("SELECT @returnid AS result_id"); $row = $result->fetch(); $returnid = $row['result_id'];
OUT パラメーターを使用した代替アプローチ
INOUT パラメーターと OUT パラメーターの使用を含め、より完全なソリューションが必要な場合は、次のコード サンプルとヒントを利用できます。
ヒント:
サンプル コード:
SQL プロシージャ:
CREATE PROCEDURE demoSpInOutSqlVars(IN pInput_Param INT, INOUT pInOut_Param INT, OUT pOut_Param INT) BEGIN SET pInOut_Param = ABS(pInput_Param) + ABS(pInOut_Param); SET pOut_Param = ABS(pInput_Param) * -3; END
PHP コード:
$phpInParam = 5; $phpInOutParam = 404; $phpOutParam = null; $stmt = $db->prepare("CALL demoSpInOutSqlVars(:phpInParam, @varInOutParam, @varOutParam)"); $stmt->bindParam(':phpInParam', $phpInParam, PDO::PARAM_INT); $db->exec("SET @varInOutParam = $phpInOutParam"); $stmt->execute(); $result = $db->query("SELECT @varInOutParam AS phpInOutParam, @varOutParam AS phpOutParam FROM dual"); $row = $result->fetch(); $phpInOutParam = $row['phpInOutParam']; $phpOutParam = $row['phpOutParam'];
以上がPHP PDO で MySQL ストアド プロシージャから変数を取得する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。