我在这个查询中做错了什么?

时间:2016-06-28 19:42:16

标签: php mysql

有三个表,

  • 存储用户详细信息
  • 存储组详细信息
  • 存储用户和组ID。

我需要检查用户是否已经是一个组的成员。我正在使用此查询来实现:

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;
}

2 个答案:

答案 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变量结构。