PDO MySQL where 条件 if null 或 equal

Nev*_*ore 0 php mysql pdo

我有一个产品表,其中包含 types_id、mid_types_id 和 sub_types_id。sub_types_id 可以为空。

我的查询是这样的:

public function getProductsByType($types_id, $mid_types_id, $sub_types_id, $limit, $offset) {
        $sql = "SELECT * FROM products AS p WHERE p.types_id = :types_id AND p.mid_types_id = :mid_types_id";
        if (!empty($sub_types_id)) $sql .= " AND p.sub_types_id = :sub_types";
        $sql .= " GROUP BY p.id LIMIT :limit OFFSET :offset";

        $this->db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
        $query = $this->db->prepare($sql);
        $query->bindParam('types_id', $types_id);
        $query->bindParam('mid_types_id', $mid_types_id);
        if (!empty($sub_types_id)) $query->bindParam('sub_types_id', $sub_types_id);
        $query->bindParam('limit', $limit);
        $query->bindParam('offset', $offset);
        $query->execute();
        if ($query->rowCount() > 0)
            return $query->fetchAll(PDO::FETCH_ASSOC);
        return null;
    }
Run Code Online (Sandbox Code Playgroud)

我的表的数据如下:

类型 ID = 3,中间类型 ID = 4,子类型 ID = 2

types_id = 1,mid_types_id = 1,sub_types_id = NULL

当我发送到 types_id:3、mid_types_id:4、sub_types:2 时,它可以工作。另外,如果我发送到 types:3, mid_types_id:4 它也有效。因为它不控制 sub_types_id 为空。

如果我创建的查询没有 sub_types_id 空控件。它有效,但如果我将 sub_types_id 作为空发送。这不起作用。

我怎么解决这个问题 ?

You*_*nse 5

使用Mysql太空船运算符,<=>

AND p.sub_types_id <=> :sub_types
Run Code Online (Sandbox Code Playgroud)