2012-10-03 2 views
3

Je n'arrive pas à comprendre pourquoi j'obtiens l'erreur: "Le nombre de variables ne correspond pas au nombre de paramètres dans l'instruction préparée".Mysqli bind param - le nombre de variables ne correspond pas au nombre de paramètres

Mon code ressemble à ceci:

$DB['con'] = new mysqli($$DB['host'],$DB['user'],$DB['pass'],$DB['base']); 

$stmt=$DB['con']->prepare("insert into points(iduser,puncte,nume,email,telefon,ultimulpost)values('?',?,'?','?','?',(SELECT CURDATE()))"); 
$stmt->bind_param('sisss',$idm,$mynumber,$nume,$email,$tel); 
$stmt->execute(); 
+0

Vous avez oublié de mettre $ DB [ 'con'] -> avant bind_param() et execute() – bodi0

Répondre

8

Le problème est dans cette ligne:

$stmt=$DB['con']->prepare("insert into points(iduser,puncte,nume,email,telefon,ultimulpost)values('?',?,'?','?','?',(SELECT CURDATE()))"); 

Votre erreur est que vous mettez des guillemets autour des ? espaces réservés. Cela signifie qu'ils sont interprétés comme une chaîne littérale ?, plutôt que comme un espace réservé qui doit être rempli. Vous avez donc seulement un espace réservé, donc quand vous envoyez cinq, il vous dit que vous avez le mauvais numéro.

Les guillemets sont inutiles. Le point entier de 'sisss' est de dire "ces valeurs sont des chaînes", donc vous n'avez pas besoin d'utiliser les guillemets pour dire la même chose.

Ce qui suit devrait fonctionner:

$stmt=$DB['con']->prepare("insert into points(iduser,puncte,nume,email,telefon,ultimulpost)values(?,?,?,?,?,(SELECT CURDATE()))"); 
+2

Alors, pourquoi était-ce pas accepté? –

Questions connexes