在SELECT on prepared语句(fetch_assoc()函数)期间发生PHP错误

在SELECT on prepared语句(fetch_assoc()函数)期间发生PHP错误,php,mysqli,Php,Mysqli,这是一个常见的问题,但我已经做了研究,找不到解决办法。我来了 我得到的错误是:致命错误:对非对象调用成员函数fetch_assoc() 首先,我启用了mysqlnd。其次,我的查询没有错误。我能够在phpmyadmin中运行它,没有任何问题 下面是正在运行的查询: SELECT * FROM photos WHERE name LIKE '%ait%' UNION SELECT photos.* FROM photos, photo_tag, tags WHERE photo_tag.ph

这是一个常见的问题,但我已经做了研究,找不到解决办法。我来了

我得到的错误是:致命错误:对非对象调用成员函数fetch_assoc()

首先,我启用了mysqlnd。其次,我的查询没有错误。我能够在phpmyadmin中运行它,没有任何问题

下面是正在运行的查询:

SELECT * FROM photos WHERE name LIKE '%ait%' 
UNION 
SELECT photos.* FROM photos, photo_tag, tags 
WHERE photo_tag.photo_id = photos.id 
AND photo_tag.tag_id = tags.id 
AND tags.name IN('ait')
$stmt = $this->conn->prepare($query);
if($stmt){
    $stmt->execute();
    while($row = $stmt->get_result()->fetch_assoc()){
        $photo = new Photo(null, null, null, null);
        $photo->id=$row["id"];
        $photo->userId=$row["user_id"];
        $photo->name = $row["name"];
        $photo->photoPath=$row["photo_path"];
        $result[] = $photo;
    }
    return $result;
}else{
    var_dump($this->db->error);
}
下面是发生错误的代码(更具体地说是在fetch_assoc()函数中):

SELECT * FROM photos WHERE name LIKE '%ait%' 
UNION 
SELECT photos.* FROM photos, photo_tag, tags 
WHERE photo_tag.photo_id = photos.id 
AND photo_tag.tag_id = tags.id 
AND tags.name IN('ait')
$stmt = $this->conn->prepare($query);
if($stmt){
    $stmt->execute();
    while($row = $stmt->get_result()->fetch_assoc()){
        $photo = new Photo(null, null, null, null);
        $photo->id=$row["id"];
        $photo->userId=$row["user_id"];
        $photo->name = $row["name"];
        $photo->photoPath=$row["photo_path"];
        $result[] = $photo;
    }
    return $result;
}else{
    var_dump($this->db->error);
}

如果你们能帮助我,我将非常感激。

您应该只调用
get\u result()
一次,而不是每次通过循环

$stmt->execute();
$stmt_result = $stmt->get_result();
while($row = $stmt_result->fetch_assoc()){
    $photo = new Photo(null, null, null, null);
    $photo->id=$row["id"];
    $photo->userId=$row["user_id"];
    $photo->name = $row["name"];
    $photo->photoPath=$row["photo_path"];
    $result[] = $photo;
}

使用左联接而不是表1、表2、表3中的联接。问题出在SQL中query@EduardVoid不是。有很多方法可以连接。使用JOIN或我的方式。