目的: MySQL ストアド プロシージャから LAST_INSERT_ID() 値をフェッチし、それに割り当てます。 PHP 変数。
PDO バインディングを使用して提供された PHP コードにもかかわらず、simpleProcedure ストアド プロシージャから LAST_INSERT_ID() 出力変数をキャプチャできません。
MySQL から出力変数をフェッチしていますPHP PDO のストアド プロシージャには 2 つの段階が含まれますprocess:
ステージ 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 変数に割り当てます。
PHP 変数を INOUT およびMySQL プロシージャの OUT パラメータでは、実行時エラーが発生する可能性があります。変数は IN パラメータにのみバインドすることをお勧めします。
以上がPDO を使用して PHP の MySQL ストアド プロシージャから出力変数を取得する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。