在 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中文网其他相关文章!