2012-01-02 18 views
5

Próbuję uruchomić wiele zapytań w bazie danych za pomocą MySQLi. To jest mój kod:Przygotowane przez MySQLi oświadczenie zwracające fałsz

$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(); 

Ale gdy kod jest uruchamiany otrzymuję ten błąd:

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

mam zaznaczone, że pola bazy danych istnieje, więc nie jest to. Pierwsze zapytanie działa, po prostu wydaje się drugie, które nie działa. Uruchomiłem kwerendę samodzielnie w phpMyAdmin i to z powodzeniem tworzy zestaw wyników, więc naprawdę nie wiem, co jest nie tak.

+0

które wywołanie "bind_param()' jest to? pierwszy dla hasła lub drugi dla pola 'user_id'? A dlaczego nie używasz tylko jednego zapytania? – Progman

Odpowiedz

8

prepare zwraca wartość false, jeśli wystąpi błąd. spróbuj

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

i pojawi się komunikat o błędzie mysql.

Powiązane problemy