開発者は、多くの場合、PHP スクリプトからストアド プロシージャを呼び出す必要に遭遇します。ストアド プロシージャは、入力パラメータと出力パラメータの組み合わせを取ることができます。入力パラメータはプロシージャに値を提供し、出力パラメータはプロシージャから計算された値を受け取ります。この記事では、「inout」パラメータを除く、特に入力パラメータと出力パラメータの両方を取る MySQL ストアド プロシージャの呼び出しに焦点を当てます。
残念ながら、MySQLi の手続き型インターフェイスとオブジェクト指向インターフェイスは、出力ストアド プロシージャ パラメータのネイティブ サポートが不足しています。回避策として、MySQL ユーザー変数を利用して出力値を受け取り、別の SELECT ステートメントを使用してそれらを取得できます。ユーザー変数と SELECT ステートメントを実装することにより、入力パラメータと出力パラメータの両方を使用してストアド プロシージャを効果的に処理できます。
手続き型 MySQLi インターフェイスを使用した次の PHP コードを検討してください。
$procInput1 = 123; $procInput2 = 456; $procInput3 = 789; $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); $procOutput_sum = $result['@sum']; $procOutput_product = $result['@product']; $procOutput_average = $result['@average'];
この例では、MySQL ユーザー変数 (@sum、@product、@average) がストアド プロシージャで定義されています。 mysqli_query("SELECT @sum, @product, @average") への呼び出しは、ストアド プロシージャによって設定された値を取得し、それらを PHP 変数 ($procOutput_sum、$procOutput_product、$procOutput_average) に割り当てます。
代わりに、オブジェクト指向の MySQLi インターフェースを使用することもできます。
$procInput1 = 123; $procInput2 = 456; $procInput3 = 789; $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(); $procOutput_sum = $result['@sum']; $procOutput_product = $result['@product']; $procOutput_average = $result['@average'];
オブジェクト指向のアプローチは、prepare()、bind_param()、execute() を利用して、同様のパターンに従います。 () および query() メソッドを使用して、ストアド プロシージャを呼び出し、ユーザー変数を通じて出力値を取得します。
MySQL ユーザー変数と SELECT ステートメントを利用することで、PHP 開発者は、入力と出力の両方を必要とするストアド プロシージャを効果的に呼び出すことができます。パラメータ。この手法は、MySQLi インターフェイスでネイティブ出力パラメーターがサポートされていない場合の回避策を提供します。
以上がPHP で入出力パラメータを使用して MySQL ストアド プロシージャを呼び出す方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。