2017-02-18 13 views
0

私はtypes_id、mid_types_idおよびsub_types_idを持つproductsテーブルを持っています。 sub_types_idはnullでもかまいません。このようなPDO MySQL where条件が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の空のコントロールなしで私のクエリを作成する場合。それは動作しますが、nullとしてsub_types_idに送信する場合。それは動作しません。

どうすればこの問題を解決できますか?

答えて

1

どうもありがとうございました、Mysqlのspaceshipオペレータ、<=>

AND p.sub_types_id <=> :sub_types 
+0

優れたソリューションを使用してください! – Nevermore

-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); 
} 
関連する問題