2012-09-04 4 views
0

Possible Duplicate:
Call to a member function bind_param() on a non-objectPHP MYSQL Подготовленные отчеты об ошибках

Я получаю следующее сообщение об ошибке:

Call to a member function bind_param() on a non-object 

Вот подготовленное заявление:

include('/path/to/connection/variable.php'); 

Этот файл проверен, работает это только создает экземпляр класса mysqli, пример:

$mysqli = new mysqli("localhost", "user", "password", "db"); 

Так что я знаю, что это не проблема ...

$stmt = $mysqli->prepare("INSERT INTO `users` VALUES (?,?,?,?,?,?,?)"); 
$stmt->bind_param("sssssss", $firstname, $lastname, $email, $subscribed, $signup_date, $unsubscribe_date, $signup_source); 
$stmt->execute(); 
$stmt->close(); 
$mysqli->close(); 

типы переменных следующим образом:

$firstname = string 
$lastname = string 
$email = string 
$subscribed = char (Y or N) 
$signup_date = DATE - date('Y-m-d') 
$unsubscribe_date = DATE - 0000-00-00 Entered Initially 
$signup_source = string 

Я пытался найти все обычные подозреваемые, проверил соединение, в основном я написал отдельный оператор SELECT, и он работает. «ПОЛЬЗОВАТЕЛИ» - действительная таблица. Разрешения для подключения - это root, так что это не проблема. Я переключил типы для дат между «s» и «d» и даже попробовал все с фиктивными переменными - никакой разницы.

Я надеюсь, что это что-то простое - потому что я уже в последний час ломаю свой мозг, и я не вижу ничего плохого в заявлении выше.

+0

Да - я получаю '' false' на var_dump ($ STMT) ', который является то, что сбивает с толку я, потому что оператор имеет правильный синтаксис, это правильная таблица, и поле считается правильным и т. д. –

+0

Редактирование: я нашел проблему - мне не хватало поля на INSERT - черт возьми, я ненавижу, когда это так просто. ... В связи с тем, что я не лучший с mySQL, есть ли способ, которым я могу настроить INSERT только на пару полей - т.е. исключить конечные поля в инструкции? –

ответ

4

Это обычно означает, что ваш вызов ->prepare() не удался и возвратил логический FALSE вместо объекта-оператора. Проверьте, что:

$stmt = $mysqli->prepare("INSERT INTO `users` VALUES (?,?,?,?,?,?,?)") or die($mysqli::error); 
+0

Это - «var_dump ($ stmt)», и он возвращает «FALSE», поэтому я не понимаю, потому что утверждение выглядит корректным. –

+1

Проверить $ mysqli :: error по этой причине. –

+0

Я нашел проблему - мне не хватало поля на INSERT - черт возьми, я ненавижу, когда это так просто .... –

1

В ответ на ваш вопрос, вы можете сделать следующее:

INSERT INTO tableName (column1, column2, column3,...) 
VALUES (value1, value2, value3,...) 
+0

Кажется, мне 7, первая «переменная» содержит типы полей. –

+0

Ах .. спасибо, сэр, я знал, что есть путь! –

Смежные вопросы