Bonjour à tous,
Je patauge depuis quelques jours avec la transmission d’arguments entre PHP et MYSQL sur l’appel d’une procédure stockée.
Cette procédure utilise un jeu de 7 arguments de types variables dont certains sont « IN », d’autres « INOUT » et les derniers « OUT ».
La procédure renvoie un jeu de données et renseigne les variables « INOUT » et « OUT » reçues en arguments.
Voici les données vues côté MYSQL :
Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 -- initialisation des valeurs des paramètres set @p_Date = '2015-03-21' , @p_IdCmde = null , @p_Auteur = 38 , @p_MontantHT = null , @p_NbColis = null , @p_DateCreation = null , @p_IdClient = 16 ; -- Appel de la fonction call ps_Cmde_LireTout(@p_IdClient, @p_Date,@p_IdCmde,@p_Auteur,@p_MontantHT,@p_NbColis, @p_DateCreation); -- Affichage des valeurs de retour des paramètres select @p_IdClient, @p_Date,@p_IdCmde,@p_Auteur,@p_MontantHT,@p_NbColis, @p_DateCreation; -- Affichage du jeu de données de résultat select * from commandes where IdCommande = @p_IdCmde;
Voilà la fonction PHP dans laquelle j’essaie d’appeler la procédure ($cnx est une connexion PDO ouverte sur la base concernée) :
Et voici le message que j’obtiens :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27 function SQLrsCommandeClient($cnx, $p_IdClient, $p_Date,$p_IdCmde,$p_Auteur,$p_MontantHT,$p_NbColis, $p_DateCreation){ try{ $cmd = $cnx->prepare("call ps_Cmde_LireTout(:IdClient,:DateDepart,:IdCmde,:Auteur,:MontantHT,:NbColis,:DateCreation)"); $cmd->bindParam(':IdClient', $p_IdClient, PDO::PARAM_INT); $cmd->bindParam(':DateDepart', $p_Date, PDO::PARAM_STR,10); $cmd->bindParam(':IdCmde', $p_IdCmde, PDO::PARAM_INT|PDO::PARAM_INPUT_OUTPUT); $cmd->bindParam(':Auteur', $p_Auteur, PDO::PARAM_INT|PDO::PARAM_INPUT_OUTPUT); $cmd->bindParam(':MontantHT', $p_MontantHT, PDO::PARAM_STR,12); $cmd->bindParam(':NbColis', $p_NbColis, PDO::PARAM_INT); $cmd->bindParam(':DateCreation', $p_DateCreation, PDO::PARAM_STR,10); $cmd->execute(); $Rs= $cmd->fetchall(); $cmd->closeCursor(); // Termine le traitement de la requête print_r($p_IdCmde); $output = $cnx->query("select @p_IdClient, @p_Date,@p_IdCmde,@p_Auteur,@p_MontantHT,@p_NbColis, @p_DateCreation")->fetch(PDO::FETCH_ASSOC); var_dump($output); return $Rs; } catch (Exception $err){ Erreur('Echec de la commande ' . 'SQLrsCommandeClient()' , 'Erreur :' .$err->getmessage() ); return NULL; } }
Sauf erreur il semblerait que le nombre de paramètres ne corresponde pas hors il me semble qu’il y en a bien 7 de chaque côté!
Un petit coup de main me semble nécessaire...
Partager