2012-10-03 7 views
3

Я не могу понять, почему я получаю ошибку: «Число переменных не соответствует количеству параметров в подготовленном сообщении».Mysqli bind param - число переменных не совпадает с числом параметров

Мой код выглядит следующим образом:

$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

Вы забыли поставить $ DB [ 'мошенника'] -> перед тем bind_param() и выполнить() – bodi0

ответ

8

Проблема заключается в этой строке:

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

Ваша ошибка состоит в том, что вы ставите кавычки вокруг ? заполнителей. Это означает, что они интерпретируются как буквальная строка ?, а не как заполнитель, который нуждается в заполнении. Поэтому у вас на самом деле есть только один заполнитель, поэтому, когда вы отправляете пять, это говорит вам, что у вас неправильный номер.

Кавычки не нужны. Весь смысл 'sisss' состоит в том, чтобы сказать, что «эти значения являются строками», поэтому вам не нужно использовать кавычки, чтобы сказать то же самое.

должно работать:

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

Так почему же это не принято? –