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

cricri2394 Messages postés 150 Date d'inscription   Statut Membre Dernière intervention   -  
cricri2394 Messages postés 150 Date d'inscription   Statut Membre Dernière intervention   -
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

ljm972 Messages postés 255 Date d'inscription   Statut Membre Dernière intervention   29
 
Bonjour,
Peut-être que tu devrais faire un test sur les variable $_POST, s'il n'y a pas une entré nulle
0
cricri2394 Messages postés 150 Date d'inscription   Statut Membre Dernière intervention   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.
0
ljm972 Messages postés 255 Date d'inscription   Statut Membre Dernière intervention   29
 
Bonjour,
comment tu as implémenté ta fonction nouv_id() ?
0
cricri2394 Messages postés 150 Date d'inscription   Statut Membre Dernière intervention   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;
}
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cricri2394 Messages postés 150 Date d'inscription   Statut Membre Dernière intervention   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 ));
0