Maison  >  Article  >  base de données  >  Comment puis-je appeler une procédure stockée MySQL avec des paramètres d'entrée et de sortie en PHP ?

Comment puis-je appeler une procédure stockée MySQL avec des paramètres d'entrée et de sortie en PHP ?

Susan Sarandon
Susan Sarandonoriginal
2024-11-08 02:13:01502parcourir

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

Appel de procédures stockées MySQL avec des paramètres d'entrée et de sortie en PHP

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn