からPHP MySQLでストアドプロシージャを呼び出したいと思います。プロシージャは入力および出力パラメータを受け取ります- not "INOUT"パラメータ。
簡単な例として、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スクリプト/ページ側から、次の変数があるとします(「proc input variables」と呼びます)。ストアドプロシージャにinput呼び出すときのパラメーター:
$procInput1 = "123";
$procInput2 = "456";
$procInput3 = "789";
PHP script/page side)には、次の変数(「proc出力変数」と呼びます)があり、ストアドプロシージャにoutputパラメータをset toストアドプロシージャに設定すると、次のようになります。
$procOutput_sum;
$procOutput_product;
$procOutput_average;
つまり、本質的にPHPスクリプト/ページ側で、私が実行できるようにしたいこと、本質的に(次のコードは有効)、は...
call test_proc($procInput1, $procInput2, $procInput3, $procOutput_sum, $procOutput_product, $procOutput_average);
...そして、一度呼び出されると、次のPHPコード...
echo "Sum: ".$procOutput_sum;
echo "Product: ".$procOutput_product;
echo "Average: ".$procOutput_average;
...次の出力が生成されます:
Sum: 1368
Product: 44253432
Average: 456
1つの注意点は、可能であれば、MySQLiproceduralfunctions/interfaceを使用してこれを実行できるようにしたいということです。それが不可能な場合は、機能させることができますが、使用します。
私はかなり長い間プログラミングをしてきましたが、PHP言語は私にとって比較的新しい試みです。PHPからMySQLストアドプロシージャを呼び出すチュートリアルがたくさんありました。 inputパラメータを持つプロシージャ、outputパラメータを持つストアドプロシージャの呼び出しに関するチュートリアル、およびinoutパラメータ。both入力および同時に出力パラメーター、特に「inout」パラメーターを使用しないパラメーターバインディングのコーディング方法を理解できません(例:mysqli_stmt_bind_paramとmysqli_stmt_bind_result)を実行し、すべて正常に機能するようにします。
どんな助けでも大歓迎です、そして私は事前に感謝します!
残念ながら、MySQLi しない は、出力sprocパラメーターをネイティブでサポートしています。代わりに、MySQL ユーザー変数 に出力してから、別のSELECT
ステートメントを使用して値をフェッチする必要があります。
手続き型インターフェースの使用:
$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'];
または、オブジェクト指向のインターフェースを使用します。
$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'];