Lors de l'appel d'une procédure stockée dans MySQL qui nécessite à la fois des paramètres d'entrée et de sortie (à l'exclusion des paramètres INOUT), il est essentiel de comprendre les nuances des interfaces de connexion et d'instruction de PHP.
Configuration de la procédure
Considérez la procédure stockée MySQL suivante, qui prend les paramètres d'entrée et calcule les valeurs de sortie :
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 ;
Connexion et instruction PHP
Pour appeler cette procédure, vous pouvez utiliser l'interface procédurale ou orientée objet pour MySQLi.
Interface procédurale :
$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);
Interface orientée objet :
$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();
Liaison de paramètres
Pour les deux interfaces, l’étape de liaison des paramètres est cruciale. Les paramètres d'entrée sont généralement liés par « i » pour les entiers, et les paramètres de sortie sont liés par « @ » suivi du nom du paramètre.
Récupération de sortie
Après l'exécution du Instruction CALL, une instruction SELECT distincte est exécutée pour récupérer les valeurs des variables utilisateur MySQL (@sum, @product, @average) que la procédure stockée a renseignée.
Conclusion
Bien que MySQLi ne prenne pas en charge nativement la liaison directe des paramètres de sortie, l'utilisation de variables utilisateur et d'une instruction SELECT ultérieure permet aux développeurs de travailler avec des procédures qui nécessitent à la fois des paramètres d'entrée et de sortie.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!