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) :
Mais quand j'exécute mon code, j'obtiens cet énigmatique message d'erreur :
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();
La ligne 284, c'est : $prep->execute();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
Une idée à me soumettre pour résoudre ça ?
Partager