我只想选择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).")";