Maison  >  Questions et réponses  >  le corps du texte

PHP : appelez la procédure stockée MySQL avec les paramètres d'entrée et de sortie (pas "INOUT")

Je souhaite appeler une procédure stockée dans MySQL depuis PHP. Le processus prend des paramètres d'entrée et de sortie - et non des paramètres "INOUT" .

Pour donner un exemple simple, supposons que j'ai la procédure stockée suivante dans 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 ;

Maintenant, du côté du script/page PHP, disons que j'ai les variables suivantes (appelons-les "variables d'entrée proc") et que je souhaite les fournir comme paramètres d'entrée à la procédure stockée lorsque je l'appelle :

$procInput1 = "123";
$procInput2 = "456";
$procInput3 = "789";

Supposons que du côté du script/page PHP, j'ai également les variables suivantes (appelons-les "variables de sortie proc") et je souhaite les fournir comme paramètres de sortie à la procédure stockée lorsque je l'appelle, par la procédure stockée Paramètres  :

$procOutput_sum;
$procOutput_product;
$procOutput_average;

Donc, essentiellement, ce que je veux faire, essentiellement (Je me rends compte que le code suivant n'est pas valide) , en termes de scripts/pages PHP, c'est... < /p>

call test_proc($procInput1, $procInput2, $procInput3, $procOutput_sum, $procOutput_product, $procOutput_average);

...Une fois appelé, le code PHP suivant apparaîtra...

echo "Sum: ".$procOutput_sum;
echo "Product: ".$procOutput_product;
echo "Average: ".$procOutput_average;

... devrait produire le résultat suivant :

Sum: 1368
Product: 44253432
Average: 456

Notez que j'aimerais pouvoir le faire en utilisant les procéduresfonctions/interfaces MySQLi si possible. Si ce n'est pas possible, j'utiliserai une méthode pour que cela fonctionne.

Je programme depuis un certain temps, mais le langage PHP est une activité relativement nouvelle pour moi. J'ai trouvé des tonnes de tutoriels sur l'appel de procédures stockées MySQL à partir de PHP. Certains sont des tutoriels pour appeler des procédures stockées à l'aide des paramètres input, d'autres sont des tutoriels pour appeler des procédures stockées à l'aide des paramètres output, et certains utilisent des paramètres inout<调用存储过程的教程/strong>. Je n'ai trouvé aucun tutoriel ou exemple sur l'appel d'une procédure stockée qui simultanément simultanément entre et paramètres de sortie, sans spécifiquement pas en utilisant les paramètres "inputout". Je n'arrive pas à comprendre comment encoder les liaisons de paramètres (par exemple : mysqli_stmt_bind_param et mysqli_stmt_bind_result) et les faire fonctionner.

Toute aide serait grandement appréciée, merci d'avance !

P粉502608799P粉502608799366 Il y a quelques jours709

répondre à tous(2)je répondrai

  • P粉122932466

    P粉1229324662023-10-20 15:06:04

    DB::select('call SP_fci_cb_emp_comp_salary_revision_add(?,?,?,@,@)',
                            [
                                $my_compensation['detail']['employee_master_id'],
                                Carbon::createFromFormat('d/m/Y', $salary_revised_result['detail']->effective_date)->format('Y-m-d'),
                                $request->user_id
                            ]);

    répondre
    0
  • P粉576184933

    P粉5761849332023-10-20 13:23:10

    Malheureusement, MySQLi n'a pas de support natif pour la sortie des paramètres de procédure stockée ; la sortie doit plutôt être effectuée vers une variable utilisateur MySQL, puis utilisée dans une déclaration distincte. SELECT 获取值

    Utiliser l'interface du programme :

    $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'];

    Ou utilisez l'interface orientée objet :

    $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'];

    répondre
    0
  • Annulerrépondre