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) :
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;
    }
 }
Et voici le message que j’obtiens :
Nom : php ERREUR.png
Affichages : 930
Taille : 7,2 Ko

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...