ホームページ  >  記事  >  データベース  >  PHP PDO で MySQL ストアド プロシージャから変数を取得する方法

PHP PDO で MySQL ストアド プロシージャから変数を取得する方法

Patricia Arquette
Patricia Arquetteオリジナル
2024-11-06 18:13:03186ブラウズ

How to Retrieve Variables from MySQL Stored Procedures in PHP PDO?

PHP PDO で MySQL ストアド プロシージャから変数を取得する

この説明は、PHP を使用して MySQL ストアド プロシージャから変数を取得するための包括的なソリューションを提供することを目的としています。 PDO.

問題

PHP PDO で MySQL ストアド プロシージャから LAST_INSERT_ID() を取得しようとしているときに、実装されたコードが機能していないことが検出されました。

解決策

残念ながら、この問題は、OUT パラメータを使用した MySQL ストアド プロシージャの PHP の処理における長年のバグが原因である可能性があります。

複数ステップのプロセス

回避策には 2 段階のプロセスが含まれます:

  1. 入力変数を使用してプロシージャを実行: 入力を使用してプロシージャを実行します。
  2. クエリ変数: 別のクエリを実行して、結果を含む MySQL 変数を選択します。

変数を使用したプロシージャ呼び出し

提供された 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 パラメーターの使用を含め、より完全なソリューションが必要な場合は、次のコード サンプルとヒントを利用できます。

ヒント:

  • エラー処理を改善するには、PDO の ATTR_EMULATE_PREPARES を true に設定します。
  • PHP 変数は IN パラメーターにのみバインドします。

サンプル コード:

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

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。