[Parametre PDO]Nombre de parametre do not match

Résolu
ajp55 Messages postés 426 Date d'inscription   Statut Membre Dernière intervention   -  
ajp55 Messages postés 426 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,
Je suis entrain de developper une application web dynamique (un intranet) et j'utilise PDO pour la communication avec la base de données. Sauf que depuis ce matin une erreur que je comprend pas s'affiche.
-
SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens

PDOException dit que le nombre des parametres ne correspondent pas et pourtant ils correspondent. Voici le code PHP
$query = "INSERT INTO eleve(MATEL, NOMEL, PRENOM, DATENAISS, TUTEUR, ADRESSE, TEL, RELIGION, SEXE, 
		ANCETBS, REDOUBLANT, IMAGE, DATEAJOUT, LIEUNAISS, EMAIL, DATEARRIVEE) 
		 VALUES(:matel, :nomel, :prenom, :datenaiss, :tuteur, :addr, :tel, :rel, :sexe, :ancetbs, :redoublant, :image, :dateajout, lieunaiss, :email, :datearrivee)";
		$res = $pdo->prepare($query);
		
		$param = array(
			"matel" => $_POST['matel'],
			"nomel" => $_POST['nomel'],
			"prenom" => $_POST['prenom'],
			"datenaiss" => parseDate($_POST['datenaiss']),
			"tuteur" => $_POST['parent'],
			"addr" => $_POST['adresse'],
			"tel" => $_POST['tel'],
			"rel" => $_POST['religion'],
			"sexe" => $_POST['sexe'],
			"ancetbs" => $_POST['ancetbs'],
			"redoublant" => $_POST['redoublant'],
			"image" => $url,
			"dateajout" => date("Y-m-d", time()),
			"lieunaiss" => $_POST['lieunaiss'],
			"email" => $_POST['email'],
			"datearrivee" => parseDate($_POST['datearrivee'])
		);
		$res->execute($param);
$res->closeCursor();

Quelqu'un peut-il m'aider ou élucider le problème?
Merci d'avance pour toutes réponses.


A voir également:

2 réponses

Utilisateur anonyme
 
Bonjour

:image, :dateajout, lieunaiss, :email, ...

Il te manque un ":" devant lieunaiss, ce n'est donc pas un paramètre pour ta requête préparée.
2
JooS Messages postés 2468 Date d'inscription   Statut Membre Dernière intervention   228
 
Et aussi, dans $param, les clés doivent correspondre aux étiquettes, or, elles doivent toutes être précédés de deux points ":".

Mettez en résolu quand c'est résolu -.- ...
0
Utilisateur anonyme
 
Le ":" est nécessaire dans la requête, mais pas dans $param.
0
JooS Messages postés 2468 Date d'inscription   Statut Membre Dernière intervention   228
 
Bon a savoir !
Sauf que ça fonctionne seulement parce qu'il est rajouté par la suite si il est introuvable.
0
Utilisateur anonyme
 
ça fonctionne seulement parce qu'il est rajouté
Ah bon ? Tu le supposes, ou tu as une référence pour dire ça ?
0
JooS Messages postés 2468 Date d'inscription   Statut Membre Dernière intervention   228
 
Non je ne le supposes pas !

https://github.com/php/php-src/blob/5.5/ext/pdo/pdo_stmt.c#L363
0
Utilisateur anonyme
 
Merci de l'info !
Très intéressant., Je sens que je vais y apprendre beaucoup de choses utiles (ou pas ^^).
0