[Parametre PDO]Nombre de parametre do not match

Résolu/Fermé
ajp55 Messages postés 426 Date d'inscription dimanche 31 juillet 2011 Statut Membre Dernière intervention 17 février 2015 - 8 août 2013 à 12:13
ajp55 Messages postés 426 Date d'inscription dimanche 31 juillet 2011 Statut Membre Dernière intervention 17 février 2015 - 18 août 2013 à 10:41
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.


2 réponses

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 2465 Date d'inscription mardi 22 janvier 2008 Statut Membre Dernière intervention 8 juin 2016 228
Modifié par JooS le 9/08/2013 à 07:26
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
9 août 2013 à 08:47
Le ":" est nécessaire dans la requête, mais pas dans $param.
0
JooS Messages postés 2465 Date d'inscription mardi 22 janvier 2008 Statut Membre Dernière intervention 8 juin 2016 228
10 août 2013 à 11:27
Bon a savoir !
Sauf que ça fonctionne seulement parce qu'il est rajouté par la suite si il est introuvable.
0
Utilisateur anonyme
11 août 2013 à 00:53
ç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 2465 Date d'inscription mardi 22 janvier 2008 Statut Membre Dernière intervention 8 juin 2016 228
Modifié par JooS le 11/08/2013 à 12:52
Non je ne le supposes pas !

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