有三个表,
我需要检查用户是否已经是一个组的成员。我正在使用此查询来实现:
SELECT u.id, g.id
FROM users u, groups g
INNER JOIN user_groups ug
ON ug.user_id = u.id AND ug.group_id = g.id
WHERE ug.user_id = ? AND ug.group_id = ?
但是这给我一个错误:
Call to a member function bind_param() on boolean in
我已经检查过我的查询中是否拼错了一些单词,一切正常。
编辑:
这是一个功能:
public function isUserMember($user_id, $group_id) {
$stmt = $this->conn->prepare("
SELECT u.id, g.id from users u, groups g
INNER JOIN user_groups ug
ON ug.user_id = u.id AND ug.group_id = g.id
WHERE ug.user_id = ? AND ug.group_id = ?");
$stmt->bind_param("ii", $user_id, $group_id); // here i'm getting an error
$stmt->execute();
$stmt->store_result();
$num_rows = $stmt->num_rows;
$stmt->close();
return $num_rows > 0;
}
答案 0 :(得分:1)
尝试以下更改
删除了与用户表的不必要的连接,因为如果你有user_id和group_id,则不需要将其与用户连接
SELECT ug.id, g.id
from user_groups ug
inner join groups g
on ug.group_id = g.id
WHERE ug.user_id = ? AND ug.group_id = ?
答案 1 :(得分:1)
您的具体问题错误陈述是:
在
中的boolean上调用成员函数bind_param()
在:
$stmt->bind_param("ii", $user_id, $group_id);
这意味着布尔值(true或false)上没有函数bind_param()
,这意味着你的$stmt
是一个布尔值,意味着语句定义行已经返回 {{ 1}} 的。
这样:
FALSE
这就是问题所在。评论中的其他人说你的SQL查询是不正确的,这会导致布尔失败,但是,如果它不是你的SQL查询本身失败,那么你需要建立{ {1}}值已成功生成,并且它是有效的对象实体。
尝试输出错误日志,例如:
$stmt = $this->conn->prepare("
SELECT u.id, g.id from users u, groups g
INNER JOIN user_groups ug
ON ug.user_id = u.id AND ug.group_id = g.id
WHERE ug.user_id = ? AND ug.group_id = ?");
上面有点快速和脏但当你的$this->conn
返回false时,这个错误报告会告诉你原因。然后,您可以使用 错误信息来解决您的Query或PHP变量结构。