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 ?