MySQLi准备好的语句返回false

时间:2012-01-02 14:55:10

标签: php mysqli prepared-statement

我正在尝试使用MySQLi在我的数据库上运行多个查询。这是我的代码:

$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中自己运行查询并成功生成结果集,所以我真的不知道出了什么问题。

1 个答案:

答案 0 :(得分:9)

如果发生错误,

prepare将返回false。试试

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

应该显示一些mysql错误。