「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > PDO を使用して PHP の MySQL ストアド プロシージャから出力変数を取得する方法

PDO を使用して PHP の MySQL ストアド プロシージャから出力変数を取得する方法

2024 年 11 月 18 日に公開
ブラウズ:464

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

PDO を使用した PHP のストアド プロシージャ出力変数の取得

目的: MySQL ストアド プロシージャから LAST_INSERT_ID() 値をフェッチし、それに割り当てます。 PHP 変数。

問題ステートメント

PDO バインディングを使用して提供された PHP コードにもかかわらず、simpleProcedure ストアド プロシージャから LAST_INSERT_ID() 出力変数をキャプチャできません。

説明

MySQL から出力変数をフェッチしていますPHP PDO のストアド プロシージャには、

  1. ストアド プロシージャの実行という 2 段階のプロセスが含まれます。
  2. MySQL ユーザー変数をクエリして、その値を PHP 変数に取得します。

解決策: 2 段階のプロセス

ステージ 1: プロシージャの実行

$stmt = $db->prepare("CALL simpleProcedure(:name, @returnid)");
$stmt->bindValue(':name', $name, PDO::PARAM_STR);
$stmt->bindParam(':returnid', $returnid, PDO::PARAM_INT, 11, PDO::PARAM_INOUT);  // Note the PDO::PARAM_INOUT
$stmt->execute();

:returnid プレースホルダーを INOUT としてバインドすると、PDO は PHP 変数をプロシージャに渡すだけでなく、出力変数の値で更新します。

ステージ 2: 出力変数の取得

$sql = "SELECT @returnid AS output_id";
$result = $db->query($sql)->fetch(PDO::FETCH_ASSOC);

$lastInsertId = $result['output_id'];

MySQL ユーザー変数 @returnid をクエリして、その値を $lastInsertId PHP 変数に割り当てます。

Note

Binding PHP MySQL プロシージャの INOUT および OUT パラメータに変数を追加すると、実行時エラーが発生する可能性があります。変数は IN パラメータにのみバインドすることをお勧めします。

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

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

Copyright© 2022 湘ICP备2022001581号-3