Message d'erreur 'Erreur : SQLSTATE[HY093]: '

glow_ivory Messages postés 20 Statut Membre -  
 le père -
Bonjour,
j'ai établi un questionnaire sous forme de listes déroulantes
sur 3 choix ,au moment de l'envoi des données à ma base de données MySQL,il me retourne le message d'erreur suivant:

Erreur : SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens

voici mon code PHP:
<?php
$stock1=0;
$stock2=0;
$stock3=0;
$stock4=0;
$stock5=0;
$stock6=0;

$e1=$_POST['stock1'];
$e2=$_POST['stock2'];
$e3=$_POST['stock3'];
$e4=$_POST['stock4'];
$e5=$_POST['stock5'];
$e6=$_POST['stock6'];

if($e1="Excellent"){$stock1=10;}
if($e1="Bon"){$stock1=5;}
if($e1="Mauvais"){$stock1=0;}

if($e2="Excellent"){$stock2=10;}
if($e2="Bon"){$stock2=5;}
if($e2="Mauvais"){$stock2=0;}

if($e3="Excellent"){$stock3=10;}
if($e3="Bon"){$stock3=5;}
if($e3="Mauvais"){$stock3=0;}

if($e4="Excellent"){$stock4=10;}
if($e4="Bon"){$stock4=5;}
if($e4="Mauvais"){$stock4=0;}

if($e5="Excellent"){$stock5=10;}
if($e5="Bon"){$stock5=5;}
if($e5="Mauvais"){$stock5=0;}

if($e6="Excellent"){$stock6=10;}
if($e6="Bon"){$stock6=5;}
if($e6="Mauvais"){$stock6=0;}

try
{
// On se connecte à MySQL
$pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
$bdd = new PDO('mysql:host=localhost;dbname=audit', 'root', '', $pdo_options);

$req = $bdd->prepare('INSERT INTO stock(stock1,stock2,stock3,stock4,stock5,stock6) VALUES(stock1, :stock2, :stock3, :stock4, :stock5, :stock6 )');
$req->execute(array(

'stock1'=> $stock1,
'stock2'=> $stock2,
'stock3'=> $stock3,
'stock4'=> $stock4,
'stock5'=> $stock5,
'stock6'=> $stock6

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

?>

comme vous le voyez mon questionnaire est basé sur un système de scoring
Excellent correspond à la note 10 et ainsi de suite

Merci de m'aider si vous pouvez

4 réponses

  1. ljm972 Messages postés 255 Date d'inscription   Statut Membre Dernière intervention   29
     
    Salut,
    INSERT INTO stock(stock1,stock2,stock3,stock4,stock5,stock6)
    remplace $stock[n] par $e[n]
    0
    1. glow_ivory Messages postés 20 Statut Membre
       
      salut,
      je peux pas remplacer $stock[n] par $e[n] ,parce que la variable $stock[n] va recevoir un entier(0,5,10) dépendant du contenu de la variable $e[n] qui reçoit la valeur choisie dans la liste déroulante de mon formulaire
      Merci en tout cas
      0
  2. le père
     
    Bonjour

    Dans ta requête préparée, tu as oublié le ":" devant stock1
    $req = $bdd->prepare('INSERT INTO stock(stock1,stock2,stock3,stock4,stock5,stock6) VALUES(:stock1, :stock2, :stock3, :stock4, :stock5, :stock6 )'); 
    0
    1. glow_ivory Messages postés 20 Statut Membre
       
      Merci une autre fois pour votre aide,
      j'ai fais la remarque moi même ,mais ça marche pas :(
      0
  3. le père
     
    Pourtant, ça correspondait bien au message d'erreur. As-tu toujours le même ? Peux-tu montrer ton code corrigé ?
    0
    1. glow_ivory Messages postés 20 Statut Membre
       
      salut,
      c'est toujours le meme message d'erreur qui s'affiche ,malgré l'ajout des deux points manquants avant stock1.



      <?php
      $stock1=0;
      $stock2=0;
      $stock3=0;
      $stock4=0;
      $stock5=0;
      $stock6=0;

      $e1=$_POST['stock1'];
      $e2=$_POST['stock2'];
      $e3=$_POST['stock3'];
      $e4=$_POST['stock4'];
      $e5=$_POST['stock5'];
      $e6=$_POST['stock6'];


      if($e1="Excellent"){$stock1=10;}
      if($e1="Bon"){$stock1=5;}
      if($e1="Mauvais"){$stock1=0;}

      if($e2="Excellent"){$stock2=10;}
      if($e2="Bon"){$stock2=5;}
      if($e2="Mauvais"){$stock2=0;}

      if($e3="Excellent"){$stock3=10;}
      if($e3="Bon"){$stock3=5;}
      if($e3="Mauvais"){$stock3=0;}

      if($e4="Excellent"){$stock4=10;}
      if($e4="Bon"){$stock4=5;}
      if($e4="Mauvais"){$stock4=0;}

      if($e5="Excellent"){$stock5=10;}
      if($e5="Bon"){$stock5=5;}
      if($e5="Mauvais"){$stock5=0;}

      if($e6="Excellent"){$stock6=10;}
      if($e6="Bon"){$stock6=5;}
      if($e6="Mauvais"){$stock6=0;}


      try
      {
      // On se connecte à MySQL
      $pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
      $bdd = new PDO('mysql:host=localhost;dbname=audit', 'root', '', $pdo_options);


      $req = $bdd->prepare('INSERT INTO stock(stock1,stock2,stock3,stock4,stock5,stock6) VALUES(:stock1, :stock2, :stock3, :stock4, :stock5, :stock6 )');
      $req->execute(array(

      'stock1'=> $stock1,
      'stock2'=> $stock2,
      'stock3'=> $stock3,
      'stock4'=> $stock4,
      'stock5'=> $stock5,
      'stock6'=> $stock6


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

      ?>
      0
  4. le père
     
    Je n'ai pas l'habitude de PDO mais si j'en crois le manuel PHP tu devrais aussi utiliser le : dans les noms des paramètres de l'array que tu passes à execute :
    $req->execute(array(
      ':stock1'=> $stock1,
      ':stock2'=> $stock2,
      ':stock3'=> $stock3,
      ':stock4'=> $stock4,
      ':stock5'=> $stock5,
      ':stock6'=> $stock6 )); 
    0