PDO MySQL其中条件为null或相等

时间:2017-02-18 15:10:25

标签: php mysql pdo

我有一个product表,其中包含types_id,mid_types_id和sub_types_id。 sub_types_id可以为null。

我的查询是这样的:

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

我的表格数据如下:

types_id = 3,mid_types_id = 4,sub_types_id = 2

types_id = 1,mid_types_id = 1,sub_types_id = NULL

当我发送到types_id时:3,mid_types_id:4,sub_types:2它可以工作。此外,如果我发送到类型:3,mid_types_id:4它也有效。因为它不能控制null_的sub_types_id。

如果我在没有sub_types_id空控件的情况下创建我的查询。它工作,但如果我发送到sub_types_id为null。它不起作用。

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:2)

使用Mysql spaceship运算符<=>

AND p.sub_types_id <=> :sub_types

答案 1 :(得分:-1)

使用PDO::PARAM_NULL预定义常量指定空值。

if (!empty($sub_types_id)) {
  $query->bindParam('sub_types_id', $sub_types_id);
} else {
  $query->bindParam("sub_types_id", $sub_types_id, PDO::PARAM_NULL);
}