2012-01-02 44 views
5

Tôi đang cố chạy nhiều truy vấn trên cơ sở dữ liệu của mình bằng MySQLi. Đây là mã của tôi:Câu lệnh chuẩn bị MySQLi trả về 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(); 

Nhưng khi đang chạy tôi nhận được lỗi này:

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

Tôi đã kiểm tra rằng các lĩnh vực cơ sở dữ liệu tồn tại, do đó, nó không phải là. Truy vấn đầu tiên hoạt động, nó chỉ có vẻ là truy vấn thứ hai không hoạt động. Tôi đã tự chạy truy vấn trong phpMyAdmin và tạo thành công một tập kết quả, vì vậy tôi thực sự không biết có gì sai.

+0

cuộc gọi 'bind_param()' nào? cái đầu tiên cho mật khẩu hoặc mật khẩu thứ hai cho trường 'user_id'? Và tại sao bạn không chỉ sử dụng một truy vấn? – Progman

Trả lời

8

prepare trả về false nếu xảy ra lỗi. hãy thử

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

và một số lỗi mysql sẽ được hiển thị.

Các vấn đề liên quan