【问题标题】:MySQLi prepared statement returning falseMySQLi 准备好的语句返回 false
【发布时间】:2012-01-31 21:37:17
【问题描述】:

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

【问题讨论】:

  • 是哪个bind_param() 调用的?第一个用于密码还是第二个用于user_id 字段?为什么不只使用一个查询?

标签: php mysqli prepared-statement


【解决方案1】:

prepare 如果发生错误,则返回 false。试试

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

应该会显示一些mysql错误。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-01
    • 1970-01-01
    • 2011-01-23
    • 2010-11-01
    相关资源
    最近更新 更多