[Parametre PDO]Nombre de parametre do not match

Résolu
ajp55 Messages postés 482 Statut Membre -  
ajp55 Messages postés 482 Statut Membre -
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.



--
"L'ordinateur est une grande invention : il y a autant d'erreur qu'avant mais plus personne n'est responsable..."

2 réponses

  1. 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
  2. JooS Messages postés 2705 Statut Membre 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
    1. Utilisateur anonyme
       
      Le ":" est nécessaire dans la requête, mais pas dans $param.
      0
    2. JooS Messages postés 2705 Statut Membre 228
       
      Bon a savoir !
      Sauf que ça fonctionne seulement parce qu'il est rajouté par la suite si il est introuvable.
      0
    3. 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
    4. JooS Messages postés 2705 Statut Membre 228
       
      Non je ne le supposes pas !

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