Connection base de donnees

Résolu
jai un probleme avec mon code
c 'est ce qui apparait lorsqu' on clique sur le bouton envoyer
" Erreur : SQLSTATE[HY093]: Invalid parameter number: parameter was not defined "
j aimerais savoir ce que cela signifie et comment resoudre le probleme svp

mon code est le suivant :
<?php
try
{
$pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
$bdd= new PDO('mysql:host=localhost;dbname=adhesion', 'root', '' , $pdo_options);
$req=$bdd ->prepare ('INSERT INTO membre (ami,nom,info,precision,motivation, monsieur,name , prenom , Adresse, ville, Commune,
cellulaire,telephone,email,date_naissance,profession,cheque) VALUES (:ami, :nom,:info,:precision,:motivation,:monsieur,:name
, :prenom , :Adresse, :ville, :Commune, :cellulaire,:telephone,:email,:date_naissance,:profession,:cheque)');
$req ->execute( array( $_POST['ami'],$_POST['nom'],$_POST['info'],$_POST['precision'],$_POST['motivation'],$_POST['monsieur'],
$_POST['name'],$_POST['prenom'],$_POST['Adresse'],$_POST['ville'],$_POST['Commune'],$_POST['cellulaire'],$_POST['telephone'],
$_POST['email'],$_POST['date_naissance'],$_POST['profession'],$_POST['cheque']));
echo'Inscription effectuée avec succes Bienvenue ! ';
}

catch(Exception $e)
{
die('Erreur : '.$e->getMessage());
}
?>

5 réponses

  1. Bonjour

    Tu as cette erreur parce que tu as utilisé des paramètres nommés dans ta requête préparée (:ami,:nom...). Tu DOIS donc utiliser un tableau associatif pour l'exécution de la requête :
     array( ':ami'=>$_POST['ami'],':nom'=>$_POST['nom'],...

    et non pas simplement
     array( $_POST['ami'],$_POST['nom'],...


    Sinon, mysql ne sait pas à quel paramètre nommé correspond chacune des valeurs de ton array.
    1. merci je revois et je vous fais signe
  2. Penses la prochaine fois à mettre ton script dans les balises <code> s'il te plaît et à également marqué ton sujet comme résolu ;)
    1. ok c'est compris
  3. maintenant c est une erreur qui se signale
    "
    Erreur : SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'precision,motivation,monsieur,name,prenom,Adresse,ville,Commune, cellulaire,tel' at line 1 "

    1. <?php
      try
      {
      $pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
      $bdd= new PDO('mysql:host=localhost;dbname=adhesion', 'root', '' , $pdo_options);
      $req=$bdd ->prepare('INSERT INTO membre(ami,nom,info,precision,motivation,monsieur,name,prenom,Adresse,ville,Commune,
      cellulaire,telephone,email,date_naissance,profession,cheque) VALUES (:ami,:nom,:info,:precision,:motivation,:monsieur,:name
      ,:prenom,:Adresse,:ville,:Commune,:cellulaire,:telephone,:email,:date_naissance,:profession,:cheque)');
      $req ->execute(array(
      'ami'=>$_POST['ami'],
      'nom'=>$_POST['nom'],
      'info'=>$_POST['info'],
      'precision'=>$_POST['precision'],
      'motivation'=>$_POST['motivation'],
      'monsieur'=>$_POST['monsieur'],
      'name'=>$_POST['name'],
      'prenom'=>$_POST['prenom'],
      'Adresse'=>$_POST['Adresse'],
      'ville'=>$_POST['ville'],
      'Commune'=>$_POST['Commune'],
      'cellulaire'=>$_POST['cellulaire'],
      'telephone'=>$_POST['telephone'],
      'email'=>$_POST['email'],
      'date_naissance'=>$_POST['date_naissance'],
      'profession'=>$_POST['profession'],
      'cheque'=>$_POST['cheque']));
      echo'Inscription effectuée avec succes Bienvenue ! ';
      }

      catch(Exception $e)
      {
      die('Erreur : '.$e->getMessage());
      }
      ?>
      1. 'Precision' ne lui plaît pas, ça fait partie des mots réservés de mysql :
        http://dev.mysql.com/doc/refman/5.0/en/reserved-words.html

        Deux solutions : changer le nom du champ, ou l'entourer d'accents graves (Alt Gr 7) :
        ...nom,info,`precision`,motivation,...
        1. ah je ne le savais pas merci beaucoup
        2. De rien
        3. merci beaucoup pour ton aide ça marche !!!