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 :

Appel de procédure SQL avec paramètre INOUT [PDO]


Sujet :

PHP & Base de données

  1. #1
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut Appel de procédure SQL avec paramètre INOUT
    Bonjour,

    Après le paramètre OUT qui m'a posé problème, je me casse la tête avec l'appel d'une procédure SQL contenant un paramètre INOUT.

    Début de la procédure SQL :
    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
    CREATE OR REPLACE PROCEDURE pi_ajout_candidat
    (
    	INOUT id_personne_physique INT, -- Identifiant du candidat
    	IN nom_usuel VARCHAR(48), -- Nom usuel du candidat
        IN prenom VARCHAR(32), -- Prénom principal candidat
    	IN id_civilite INT, -- Identifiant de la civilité du candidat
    	IN id_sexe INT, -- Identifiant du sexe du candidat
    	IN id_nationalite INT, -- Identifiant du pays de nationalité du candidat
    	IN id_ville_naissance INT, -- Identifiant de la ville de naissance du candidat
    	IN nom_naissance VARCHAR(48), -- Nom de naissance du candidat
    	IN date_naissance DATE, -- Date de naissance du candidat
    	IN autres_prenoms VARCHAR(48), -- Autres prénoms du candidat (séparés par une virgule et un espace)
    	IN num_ine CHAR(12) -- Numéro INE du candidat
    )

    Appel directement dans MariaDB qui fonctionne et me renvoie le résultat :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SET @idCandidat = NULL;
    CALL pi_ajout_candidat(@idCandidat, 'TEST', 'Prénom-Test', 1, 1, 1, 10000, '', '1995-07-24', 'Autre, Prénom', '12345678901');
    SELECT @idCandidat;

    Dans ma fonction Candidat->enregistrerCandidat(), j'ai ça (je vous passe le détail de la détermination des valeurs des paramètres qui sont correctement valorisés) :
    Code PHP : 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
    			$db = parent::getBdd();
    			$sql = "SET @idCandidat = $idCandidat;";
    			$db->exec($sql);
     
     
    			$sql = "
    				CALL pi_ajout_candidat(@idCandidat, :nomUsuel, :prenomUsuel, :idCivilite, :idSexe, :idNationalite, 
    					:nomNaissance, :idVilleNaissance, :dateNaissance, :autresPrenoms, :numINE);
    			";
     
    			$prep = $db->prepare($sql);
    			$prep->bindParam(':nomUsuel', $nomUsuel, \PDO::PARAM_STR);
    			$prep->bindParam(':prenomUsuel', $prenomUsuel, \PDO::PARAM_STR);
    			$prep->bindParam(':idCivilite', $idCivilite, \PDO::PARAM_INT);
    			$prep->bindParam(':idSexe', $idSexe, \PDO::PARAM_INT);
    			$prep->bindParam(':idNationalite', $idNationalite, \PDO::PARAM_INT);
    			$prep->bindParam(':nomNaissance', $nomNaissance, \PDO::PARAM_STR);
    			$prep->bindParam(':idVilleNaissance', $idVilleNaissance, \PDO::PARAM_INT);
    			$prep->bindParam(':dateNaissance', $dateNaissance, \PDO::PARAM_STR);
    			$prep->bindParam(':autresPrenoms', $autresPrenoms, \PDO::PARAM_STR);
    			$prep->bindParam(':numINE', $numINE, \PDO::PARAM_STR);
     
    			$prep->execute();
     
    			$sql = "SELECT @idCandidat";
     
    			$result = $db->query($sql)->fetchAll();
    Mais quand j'exécute mon code, j'obtiens cet énigmatique message d'erreur :
    Erreur PDO : SQLSTATE[23000]: Integrity constraint violation: 1105 Unknown error dans le fichier /home/philippe/Documents/Enfa/P2016004-GestionPublicsEnFormation/Developpement/pef/Application/Model/Candidat.php à la ligne 284
    La ligne 284, c'est : $prep->execute();
    Une idée à me soumettre pour résoudre ça ?
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  2. #2
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Débogage terminé : les paramètres transmis à la fonction du modèle n'étaient pas bien valorisés et testés.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Procédure SQL avec paramètre entrée et paramètre sortie
    Par francky74 dans le forum Langage SQL
    Réponses: 6
    Dernier message: 23/07/2014, 08h25
  2. Réponses: 1
    Dernier message: 23/08/2010, 12h13
  3. Procédure PL/SQL avec paramètre in/out de type CURSOR
    Par tonio45312 dans le forum PL/SQL
    Réponses: 2
    Dernier message: 09/07/2009, 15h36
  4. SQL - Procédure stockée avec paramètres
    Par jacquesprogram dans le forum VB.NET
    Réponses: 2
    Dernier message: 23/03/2009, 11h17
  5. Appel requête SQL avec paramètre
    Par sgcb01 dans le forum SAP Crystal Reports
    Réponses: 4
    Dernier message: 13/11/2008, 12h13

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