致命错误:调用布尔值上的成员函数 Fetch_assoc()


Fatal Error: Call To A Member Function Fetch_assoc() On Boolean

我只想选择authorId只有1和2的帖子。我是这样做的:

$array = [1,2];
$array = implode(", ",$array);
$sql = "SELECT * FROM post WHERE authorId = ({$array})";
$res = $con->query($sql);
while($row = $res->fetch_assoc()){
    echo $row['firstname'] . ' ' . $row['lastname'];
}

我收到错误消息:

Fatal error: Call to a member function fetch_assoc() on boolean in C:'xampp'blablaba.php on line blablaba

但是当我尝试仅从一位作者那里获取帖子时,我不会收到任何错误消息。实际上它可以工作,这是我的一个authorId的代码:

$sql = "SELECT * FROM post WHERE authorId = 1)";
$res = $con->query($sql);
while($row = $res->fetch_assoc()){
    echo $row['firstname'] . ' ' . $row['lastname'];
}

对于此代码:

$array = [1,2];
$array = implode(", ",$array);
$sql = "SELECT * FROM post WHERE authorId = ({$array})";

原始 SQL 查询将是:

"SELECT * FROM post WHERE authorId = ('1, 2')"

首先,您可以使用"IN"运算符更改查询:

"SELECT * FROM post WHERE authorId IN ({$array})"

原始查询:

"SELECT * FROM post WHERE authorId IN ('1, 2')"

但是,IN ('1, 2')的类型是一个字符串,当这可能是整数值的列表时。您必须使用 CAST 函数将此字符串转换为字符值集:

CAST($array as CHAR);

现在,在这个带有FIND_IN_SET函数的集合中找到:

 FIND_IN_SET(authorId, CAST($array as CHAR));

最终的 sql 查询将是:

"SELECT * FROM post WHERE FIND_IN_SET(authorId, CAST($array as CHAR));"

原始查询:

"SELECT * FROM post WHERE authorId IN (1, 2);"
$array = [1,2];
$sql = "SELECT * FROM post WHERE authorId IN (".implode(",",$array).")";