Erreur : Warning: PDOStatement::execute(): SQLSTATE[HY093]

Bonjour,

je ne comprends pas l'erreur (enfin le warning) que me donne php à l'exécution d'une requête préparée. J'ai beau tout tourner dans tous les sens, je ne vois pas ce qui cloche.
J'ai donc le warning suivant :

Warning: PDOStatement::execute(): SQLSTATE[HY093]: Invalid parameter number: parameter was not defined in C:\Program Files (x86)\EasyPHP-12.1\www\***.php on line 200

$id = nouv_id($conn,'boutique');		
//die('id de la nouvelle boutique : '.$id);

$stmt = $conn->prepare("insert into wedding_presta_boutique values(:boutique_id, :boutique_user_id,
:boutique_nom,
:boutique_descr,
:boutique_type);");

$stmt->bindParam(':boutique_id' , $boutique_id);
$stmt->bindParam(':boutique_user_id' , $boutique_user_id);
$stmt->bindParam(':boutique_nom,' , $boutique_nom);
$stmt->bindParam(':boutique_descr' , $boutique_descr);
$stmt->bindParam(':boutique_type' , $boutique_type);

$boutique_id = $id;
$boutique_user_id = $user_id;
$boutique_nom = $_POST['nom_boutique'];
$boutique_descr = $_POST['descr_boutique'];
$boutique_type = $_POST['type_boutique'];

$stmt->execute();

J'ai la même requête au dessus qui elle fonctionne parfaitement par contre


$stmt = $conn->prepare("insert into wedding_user values(:user_id,
:user_login,
SHA1(:user_mdp),
:user_email,
:user_nom, :user_prenom,
:user_statut,
:user_date_naissance,
:user_siret,
:user_rs, :user_adr,
:user_cp,
:user_ville, :user_pays, :user_tel,
:user_site,
:user_fb,
:user_valide);");
$stmt->bindParam(':user_id',$user_id);
$stmt->bindParam(':user_login',$user_login);
$stmt->bindParam(':user_mdp',$user_mdp);
$stmt->bindParam(':user_email',$user_email);
$stmt->bindParam(':user_nom',$user_nom);
$stmt->bindParam(':user_prenom',$user_prenom);
$stmt->bindParam(':user_statut',$user_statut);
$stmt->bindParam(':user_date_naissance',$user_date_naissance);
$stmt->bindParam(':user_siret',$user_siret);
$stmt->bindParam(':user_rs',$user_rs);
$stmt->bindParam(':user_adr',$user_adr);
$stmt->bindParam(':user_cp',$user_cp);
$stmt->bindParam(':user_ville',$user_ville);
$stmt->bindParam(':user_pays',$user_pays);
$stmt->bindParam(':user_tel',$user_tel);
$stmt->bindParam(':user_site',$user_site);
$stmt->bindParam(':user_fb',$user_fb);
$stmt->bindParam(':user_valide',$user_valide);

$user_id = $id;
$user_login = $_POST['loginInscr'];//$login;
$user_mdp = $_POST['mdpInscr'];// $mdp;
$user_email = $_POST['niouf'];//$niouf;
$user_nom = $_POST['nom'];//$nom;
$user_prenom = $_POST['prenom'];//$prenom;
$user_statut = $_POST['statut'];//$statut;
$user_date_naissance = $_POST['date_naissance'];//$date_naissance;
$user_siret = $_POST['siret'];//$siret;
$user_rs = $_POST['rs'];//$rs;
$user_adr = $_POST['adr'];//$adr;
$user_cp = $_POST['cp'];//$cp;
$user_ville = $_POST['ville'];//$ville;
$user_pays = $_POST['pays'];//$pays;
$user_tel = $_POST['tel']; //$tel;
$user_site = $_POST['site'];//$site;
$user_fb = $_POST['fb']; //$fb;
$user_valide = 0;

$stmt->execute();

Si quelqu'un voyait ce que je ne vois pas ...

5 réponses

  • Votes
  • Date
  • Date décroissante
  1. Bonjour,
    Peut-être que tu devrais faire un test sur les variable $_POST, s'il n'y a pas une entré nulle
    1. Hello, merci pour ta réponse rapide.
      J'ai testé et mes post sont bien renseignés.
      Je vais essayer sans la transaction pdo pour voir.
      1. Hello,

        voici la fonction

        function nouv_id($conn,$table){
        switch($table){ // en fonction de la table, on tape là ou il faut pour trouver le nouvel id
        case 'user' : // on tape dans user
        $req_nouvId = "select user_id
        from wedding_user
        order by user_id desc limit 0,1;";

        $chp = "user_id";
        break;
        case 'boutique' : // on tape dans boutique
        $req_nouvId = "select boutique_id
        from wedding_presta_boutique
        order by boutique_id desc limit 0,1;";

        $chp = "boutique_id";
        break;
        }//end switch

        $res = $conn->query($req_nouvId)
        ->fetchAll(PDO::FETCH_ASSOC);

        if(count($res) == 0){
        $nouvId = 1;
        }else{ //var_dump($res);
        $id = $res[0][$chp];
        $nouvId = $id+1;
        }
        //die($nouvId);
        return $nouvId;
        }
        1. Bon j'ai trouvé une solution qui fonctionne. Je ne comprends pas mieux comme ça ça marche :

          $stmt = $conn->prepare("insert into wedding_presta_boutique values(?,?,?,?,?);");		

          $stmt->execute(array($boutique_id,
          $boutique_user_id,
          $boutique_nom,
          $boutique_descr,
          $boutique_type ));