2012-01-02 2 views
5

Я пытаюсь запустить несколько запросов в моей базе данных с помощью MySQLi. Это мой код:MySQLi готовый оператор, возвращающий false

$stmt = $mysqli->prepare('SELECT password FROM `users` WHERE username=? LIMIT 1'); 
$stmt->bind_param('s', $username); 
$stmt->execute(); 
$stmt->bind_result($hashedPass); 
$stmt->fetch(); 

/* Check the passwords match */ 
$pwdHasher = new PasswordHash(8, FALSE); 
if(!$pwdHasher->CheckPassword($password, $hashedPass)) 
    exit; 

$stmt = $mysqli->prepare('SELECT u_id FROM `users` WHERE username=? LIMIT 1'); 
$stmt->bind_param('s', $username); 
$stmt->execute(); 
$stmt->bind_result($u_id); 
$stmt->fetch(); 

Но когда код выполняется я получаю эту ошибку:

Fatal error: Call to a member function bind_param() on a non-object in C:\wamp\www\ajax\login.php on line 42 

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

+0

, который вызывает 'bind_param()' call? первый для пароля или второй для поля user_id? И почему бы вам не использовать только один запрос? – Progman

ответ

8

prepare возвращает false, если возникла ошибка. попробуйте

$stmt = $mysqli->prepare('SELECT u_id FROM `users` WHERE username=? LIMIT 1'); 
if ($stmt === FALSE) { 
    die ("Mysql Error: " . $mysqli->error); 
} 

и некоторая ошибка mysql должна отображаться.

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