2012-01-02 115 views
5

我試圖在MySQL數據庫上運行多個查詢。這是我的代碼: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()'調用它?第一個用於密碼還是第二個用於'user_id'字段?爲什麼你不使用只有一個查詢? – Progman 2012-01-02 19:20:09

回答

8

prepare如果發生錯誤,則返回false。嘗試

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

應該顯示一些mysql錯誤。