【问题标题】:Why am I getting a "Fatal error: Call to a member function fetch_assoc() on a non-object"?为什么我会收到“致命错误:在非对象上调用成员函数 fetch_assoc()”?
【发布时间】:2016-01-04 23:52:21
【问题描述】:

我正在这个项目中工作,它是一个 Android 登录应用程序。它从在线服务器获取数据。

注册成功,数据库更新,但登录无效。 我们正在使用 JSON 将数据从服务器解析到应用程序。

这是我的 PHP 代码:

public function getUserByEmailAndPassword($email, $password) {

    $stmt = $this->conn->prepare("SELECT * FROM user_info WHERE email = ?");

    $stmt->bind_param("s", $email);

    if ($stmt->execute()) {
        $user = $stmt->bind_result()->fetch_assoc();
        $stmt->close();
        return $user;
    } 
    else {
        return NULL;
    }
}

我得到的错误如下:

Fatal error: Call to a member function fetch_assoc() on a non-object.

【问题讨论】:

  • 嗯,文档说,$stmt->bind_result() 返回一个bool。因此错误消息并不奇怪。您不能在 bool 上调用方法,因为 bool 不是对象。 php.net/manual/en/mysqli-stmt.bind-result.php
  • 这里不能使用bind_result()bind_result() 允许您将变量分配给返回的每一列,您正在执行 SELECT *,所以这不起作用。如果你有 MySQLnd,那么你可以使用->get_result()。见:php.net/manual/en/mysqli-stmt.get-result.php
  • $stmt->fetch_assoc(); 应该在绑定结果变量之后进行。

标签: php android mysqli fatal-error


【解决方案1】:

bind_result() 不是您想要的方法。该方法(顺便说一下,它返回一个布尔值)允许您将变量分配给查询中返回的列。您的查询使用SELECT *,因此您不能使用bind_result()

你想要的是使用get_result()。这需要安装mysqlnd driver

$user = $stmt->get_result()->fetch_assoc();

【讨论】:

  • 感谢您的回复,但是如何将它安装在远程 linux 服务器上?
  • @SahilSethi:取决于它使用的发行版,但您可能需要安装php5-mysqlnd
  • 还没有找到出路,会在早上尝试联系托管公司。到那时还有其他解决方案吗?
  • linux服务器的发行版是Debian,有什么办法让它工作吗?
  • 我忘记了包的名字,但是试试apt-cache search mysqlnd
猜你喜欢
  • 2016-08-30
  • 2012-09-26
  • 1970-01-01
  • 2011-07-04
  • 1970-01-01
  • 2018-06-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多