PHP:调用 file.php 中非对象上的成员函数 fetch_assoc()


PHP: Call to a member function fetch_assoc() on a non-object in file.php

我正在编写PHP,这是我的代码:

public function storeUser($name, $email, $password) {
    $uuid = uniqid('', true);
    $hash = $this->hashSSHA($password);
    $encrypted_password = $hash["encrypted"]; // encrypted password
    $salt = $hash["salt"]; // salt
    $stmt = $this->conn->prepare("INSERT INTO users(unique_id, name, email, encrypted_password, salt, created_at) VALUES(?, ?, ?, ?, ?, NOW())");
    $stmt->bind_param("sssss", $uuid, $name, $email, $encrypted_password, $salt);
    $result = $stmt->execute();
    $stmt->close();
    // check for successful store
    if ($result) {
        $stmt = $this->conn->prepare("SELECT * FROM users WHERE email = ?");
        $stmt->bind_param("s", $email);
        $stmt->execute();
        $user = $stmt->bind_result()->fetch_assoc();
        $stmt->close();
        return $user;
    } else {
        return false;
    }
}

但是我收到此错误和警告,不知道如何解决:

PHP 致命错误:在文件中的非对象上调用成员函数 fetch_assoc(.php

文件.php中 mysqli_stmt::bind_result(( 的参数计数错误。

选项 1 如果你安装了 MySQL 本机驱动程序 (mysqlnd(,你可以使用

$res = $stmt->get_result();
$user = $res->fetch_array(MYSQLI_ASSOC);

此处提供示例的详细信息:http://www.pontikis.net/blog/dynamically-bind_param-array-mysqli

选项 2 如果没有,则将其与 bind_result 一起使用,更多信息在这里bind_result:http://php.net/manual/en/mysqli-stmt.bind-result.php

// IMPOTANT: you need to change your sql query to select 
// only columns which you need unique_id, name, email ...
$stmt = $this->conn->prepare("SELECT unique_id, name, email FROM users WHERE email = ?");
$stmt->bind_param("s", $email);
$stmt->execute();
// list here variables with exact amount of columns which you selecting in your query 
$stmt->bind_result($row_user_id, $row_user_name, $row_user_email);
// In case you expect 1 row 
$stmt->fetch();
var_dump($row_user_id, $row_user_name, $row_user_email);// to see result
$user = array(
     'id' => $row_user_id, 
     'name' => $row_user_name,
     'email' => $row_user_email,
);
// In case you expect many rows use while 
$users = array();
while ($stmt->fetch())
{
   $users[] = array(
        'id' => $row_user_id, 
        'name' => $row_user_name,
        'email' => $row_user_email,
   );
}
var_dump( $users );// to see result
$user = $stmt->bind_result()->fetch_assoc();

bind_result()返回bool .您正在尝试使用此语法调用bool::fetch_assoc()