致命错误:在非对象

时间:2016-05-05 07:29:43

标签: php mysql

如何修复此错误?这是我的代码。

$stmt = $this->conn->prepare("SELECT ngno, email, encrypted_password, name, user_type FROM `guide` WHERE email = ?");

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

    if ($stmt->execute()) {
        $user = $stmt->bind_result($ngno, $email, $encrypted_password, $name, $user_type)->fetch_assoc();
        $stmt->close();

即时通讯使用远程sql数据库。我也在我的localhost上尝试了这个。但后来我得到错误,致命错误调用布尔

上的成员函数fetch_assoc()

此代码使用get_result而不是bind_result。但我需要使用bind_result。任何帮助,将不胜感激。

编辑1:

我已将代码更改为以下内容,

$stmt = $this->conn->prepare("SELECT ngno, email, encrypted_password, name, user_type FROM `guide` WHERE email = ?");

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

    if ($stmt->execute()) {
        $stmt->bind_result($ngno, $email, $encrypted_password, $name, $user_type);
        $user = $stmt->fetch_assoc();
        $stmt->close();

        if($encrypted_password == $password){
            return $user;
        }
    } else {
        return NULL;
    }

我现在收到此错误。致命错误:调用未定义的方法mysqli_stmt :: fetch_assoc()

我的查询失败了吗?

2 个答案:

答案 0 :(得分:1)

bind_result()不返回对象,而是返回状态。这意味着它无法链接到该对象的另一个方法调用。你需要分两行完成。

有关详细信息,请参阅bind_result manual page

答案 1 :(得分:0)

正如Julie Pelletier上面提到的,你不能链bind_result,因为它不会返回一个对象。试试这个:

$stmt = $this->conn->prepare("SELECT ngno, email, encrypted_password, name, user_type FROM `guide` WHERE email = ?");

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

if ($stmt->execute()) {
    $stmt->bind_result($ngno, $email, $encrypted_password, $name, $user_type);
    $user = $stmt->fetch();
    $stmt->close();

注意: 使用mysqli_stmt_execute()时,必须使用mysqli_stmt_fetch()函数在执行任何其他查询之前获取数据。