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

Signaler
Messages postés
151
Date d'inscription
samedi 30 septembre 2006
Statut
Membre
Dernière intervention
13 janvier 2015
-
Messages postés
151
Date d'inscription
samedi 30 septembre 2006
Statut
Membre
Dernière intervention
13 janvier 2015
-
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

Messages postés
253
Date d'inscription
vendredi 23 février 2007
Statut
Membre
Dernière intervention
1 mai 2014
29
Bonjour,
Peut-être que tu devrais faire un test sur les variable $_POST, s'il n'y a pas une entré nulle
Messages postés
151
Date d'inscription
samedi 30 septembre 2006
Statut
Membre
Dernière intervention
13 janvier 2015
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.
Messages postés
253
Date d'inscription
vendredi 23 février 2007
Statut
Membre
Dernière intervention
1 mai 2014
29
Bonjour,
comment tu as implémenté ta fonction nouv_id() ?
Messages postés
151
Date d'inscription
samedi 30 septembre 2006
Statut
Membre
Dernière intervention
13 janvier 2015
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;
}
Messages postés
151
Date d'inscription
samedi 30 septembre 2006
Statut
Membre
Dernière intervention
13 janvier 2015
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 ));