ホームページ > データベース > mysql チュートリアル > PHP で入力パラメータと出力パラメータの両方を使用して MySQL ストアド プロシージャを呼び出すにはどうすればよいですか?

PHP で入力パラメータと出力パラメータの両方を使用して MySQL ストアド プロシージャを呼び出すにはどうすればよいですか?

Susan Sarandon
リリース: 2024-11-08 02:13:01
オリジナル
550 人が閲覧しました

How can I call a MySQL Stored Procedure with Both Input and Output Parameters in PHP?

PHP で入力パラメータと出力パラメータの両方を使用して MySQL ストアド プロシージャを呼び出す

入力パラメータと出力パラメータの両方 (INOUT パラメータを除く) を必要とする MySQL ストアド プロシージャを呼び出す場合、 PHP の接続インターフェイスとステートメント インターフェイスの微妙な違いを理解することが重要です。

プロシージャのセットアップ

次の MySQL ストアド プロシージャを考えてみましょう。これは、入力パラメータを受け取り、出力値を計算します。

DELIMITER $$

DROP PROCEDURE IF EXISTS `test_proc`$$
CREATE PROCEDURE `test_proc`(
    in input_param_1 int,
    in input_param_2 int,
    in input_param_3 int,
    out output_sum int,
    out output_product int,
    out output_average int
)
BEGIN
    set output_sum = input_param_1 + input_param_2 + input_param_3;
    set output_product = input_param_1 * input_param_2 * input_param_3;
    set output_average = (input_param_1 + input_param_2 + input_param_3) / 3;
END$$

DELIMITER ;
ログイン後にコピー

PHP 接続とステートメント

このプロシージャを呼び出すには、MySQLi の手続き型インターフェイスまたはオブジェクト指向インターフェイスのいずれかを使用できます。

手続き型インターフェイス:

$mysqli = mysqli_connect();
$call = mysqli_prepare($mysqli, 'CALL test_proc(?, ?, ?, @sum, @product, @average)');
mysqli_stmt_bind_param($call, 'iii', $procInput1, $procInput2, $procInput3);
mysqli_stmt_execute($call);

$select = mysqli_query($mysqli, 'SELECT @sum, @product, @average');
$result = mysqli_fetch_assoc($select);
ログイン後にコピー

オブジェクト指向インターフェイス:

$mysqli = new mysqli();
$call = $mysqli->prepare('CALL test_proc(?, ?, ?, @sum, @product, @average)');
$call->bind_param('iii', $procInput1, $procInput2, $procInput3);
$call->execute();

$select = $mysqli->query('SELECT @sum, @product, @average');
$result = $select->fetch_assoc();
ログイン後にコピー

パラメータ バインディング

どちらのインターフェイスでも、パラメーター バインディングの手順が重要です。通常、入力パラメータは整数の「i」でバインドされ、出力パラメータはパラメータ名が続く「@」を使用してバインドされます。

出力取得

CALL ステートメントを実行すると、別の SELECT ステートメントが実行され、ストアド プロシージャが設定した MySQL ユーザー変数 (@sum、@product、@average) から値が取得されます。

結論

MySQLi は出力パラメータの直接バインディングをネイティブにサポートしていませんが、開発者はユーザー変数と後続の SELECT ステートメントを使用して、入力パラメータと出力パラメータの両方を必要とするプロシージャを操作できます。

以上がPHP で入力パラメータと出力パラメータの両方を使用して MySQL ストアド プロシージャを呼び出すにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート