ホームページ  >  記事  >  データベース  >  PHP で PDO を使用して MySQL ストアド プロシージャ変数を取得するにはどうすればよいですか?

PHP で PDO を使用して MySQL ストアド プロシージャ変数を取得するにはどうすればよいですか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-11-09 03:20:02406ブラウズ

How do I retrieve MySQL stored procedure variables using PDO in PHP?

PHP で PDO を使用して MySQL ストアド プロシージャ変数を取得する

MySQL ストアド プロシージャから LAST_INSERT_ID() の値を取得するのは、困難な作業になる場合があります。オンラインには豊富なドキュメントがあるにもかかわらず、このプロセスは多くの開発者にとってわかりにくいことがよくあります。この記事は、この問題をわかりやすくすることを目的としており、PHP PDO を使用して変数の値を取得するためのステップバイステップのガイドを提供します。

「IN」、「INOUT」、「OUT」を使用した PHP プロシージャ パラメータパラメータ

変数を取得する鍵は、関係する 2 段階のプロセスを理解することです。まず、必要な入力パラメータと結果を保存する変数を使用してプロシージャを実行する必要があります。その後、別のクエリが実行され、指定された変数から値が取得されます。

PDO を使用して MySQL ストアド プロシージャを取得するための 2 段階のプロセス

このプロセスをデモンストレーションするには、次のようにします。次のシナリオを考えてみましょう:

  • 「IN」、「INOUT」、および「OUT」パラメータを含む SQL プロシージャ
  • プロシージャを実行して変数の値を取得するための PHP コード

SQL プロシージャ:

CREATE PROCEDURE `demoSpInOutSqlVars`(IN     pInput_Param  INT,
                                      INOUT  pInOut_Param  INT,
                                      OUT    pOut_Param    INT)
BEGIN
    /*
     * Pass the full names of SQL User Variable for these parameters. e.g. '@varInOutParam'
     * These 'SQL user variables names' are the variables that Mysql will use for:
     *    1) finding values
     *    2) storing results
     *
     * It is similar to 'variable variables' in PHP.  
     */
     SET pInOut_Param      := ABS(pInput_Param) + ABS(pInOut_Param); /* always positive sum  */
     SET pOut_Param        := ABS(pInput_Param) * -3;                /* always negative * 3  */ 
END

PHP コード:

// DB Connection
$db = appDIC('getDbConnection', 'default'); // get the default db connection
$db->setAttribute(PDO::ATTR_EMULATE_PREPARES, true);
$db->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);

// Set PHP Variables
$phpInParam = 5;
$phpInOutParam = 404; // PHP InOut variable
$phpOutParam = null; // PHP Out variable

// Define and Prepare the SQL procedure call
$sql = "call demoSpInOut(:phpInParam,
                         @varInOutParam, /* mysql variable name will be read and updated */
                         @varOutParam)"; /* mysql variable name that will be written to  */

$stmt = $db->prepare($sql);

// Bind PHP Variables and Set SQL Variables
$stmt->bindParam(':phpInParam', $phpInParam, PDO::PARAM_INT);
$db->exec("SET @varInOutParam = $phpInOutParam"); // This is safe as it just sets the value into the MySql variable.

// Execute the procedure
$allOk = $stmt->execute();

// Get the SQL Variables into the PHP variables
$sql = "SELECT @varInOutParam AS phpInOutParam,
               @varOutParam AS phpOutParam
        FROM dual";
$results = current($db->query($sql)->fetchAll());

$phpInOutParam = $results['phpInOutParam'];
$phpOutParam = $results['phpOutParam'];

// Display the PHP variables
echo "phpInParam = " . $phpInParam . "\n";
echo "phpInOutParam = " . $phpInOutParam . "\n";
echo "phpOutParam = " . $phpOutParam . "\n";

追加メモ:

  • PHP 変数 (この場合、$phpInParam) を SQL IN パラメーターにバインドするのは簡単で、PDO の bindingParam() メソッドを介して実行されます。
  • PHP 変数を SQL INOUT にバインドするおよび OUT パラメータはサポートされていないため、実行時エラーが発生します。
  • SQL プロシージャ値を取得するコツは、SQL ユーザー変数を使用して結果を保持することです。
  • 「エミュレート準備モード」で PDO を実行します。 ' は、デバッグとエラー検出に推奨されます。

結論:

PHP での MySQL ストアド プロシージャ変数の取得 PDO は、プロシージャの実行と、 SQL ユーザー変数から値を取得します。上記の手順に従うことで、開発者は PDO を使用して MySQL ストアド プロシージャから必要な変数に効率的にアクセスできます。

以上がPHP で PDO を使用して MySQL ストアド プロシージャ変数を取得するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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