首页  >  文章  >  数据库  >  如何在 PHP 中调用具有输入和输出参数的 MySQL 存储过程?

如何在 PHP 中调用具有输入和输出参数的 MySQL 存储过程?

Susan Sarandon
Susan Sarandon原创
2024-11-08 02:13:01503浏览

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

在 PHP 中调用同时带有输入和输出参数的 MySQL 存储过程

在 MySQL 中调用同时需要输入和输出参数(不包括 INOUT 参数)的存储过程时,了解 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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn