IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

PHP.PDO Appel d’une procédure stockée MYSQL avec arguments IN, OUT et INOUT


Sujet :

PHP & Base de données

  1. #1
    Membre habitué
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2010
    Messages
    252
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Janvier 2010
    Messages : 252
    Points : 145
    Points
    145
    Par défaut PHP.PDO Appel d’une procédure stockée MYSQL avec arguments IN, OUT et INOUT
    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 : 874
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...

  2. #2
    Membre habitué
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2010
    Messages
    252
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Janvier 2010
    Messages : 252
    Points : 145
    Points
    145
    Par défaut ERREUR DE SAISIE: CORRECTION
    Désolé, mon article a malencontreusement été validé alors que j'étais en train de le corriger - car c'est en le rédigeant qu'on réfléchit le plus et ma saisie d'arguments ne correspondait pas à ce que je voulais par suite de différents essais.

    Le message d'erreur ne correspond pas à la ligne d'appel que j'ai inscrite dans le code PHP.
    Voici le message correspondant (encore plus sibyllin):
    Nom : php ERREUR.png
Affichages : 871
Taille : 8,7 Ko

    Mon sujet concerne donc bien l'exploitation des options IN, OUT et INOUT.

Discussions similaires

  1. [MySQL] Utiliser les procédures stockées MySQL et étendre MySQLi dans PHP
    Par RideKick dans le forum PHP & Base de données
    Réponses: 0
    Dernier message: 12/09/2009, 13h14
  2. Réponses: 26
    Dernier message: 24/06/2009, 09h32
  3. Appel de procédure stockée Mysql
    Par Gregory.M dans le forum Windows Forms
    Réponses: 5
    Dernier message: 28/05/2009, 19h30
  4. Réponses: 1
    Dernier message: 10/10/2008, 10h50
  5. appeler une procédure stockée dans une base mysql
    Par mennou dans le forum Hibernate
    Réponses: 4
    Dernier message: 16/06/2008, 01h58

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo