2017-02-18 4 views
0

Ich habe eine Produkttabelle, die types_id, mid_types_id und sub_types_id hat. sub_types_id kann null sein.PDO MySQL wo Bedingung wenn null oder gleich

Meine Abfrage wie folgt:

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

Daten Mein Tisch ist wie:

types_id = 3, mid_types_id = 4, sub_types_id = 2

types_id = 1, mid_types_id = 1, sub_types_id = NULL

Wenn ich an types_id: 3, mid_types_id: 4, sub_types: 2 es funktioniert. Auch wenn ich an Typen sende: 3, mid_types_id: 4 funktioniert es auch. Weil es die sub_types_id, die null ist, nicht kontrolliert.

wenn ich meine Abfrage ohne sub_types_id leeren Steuerelement erstellen. Es funktioniert aber wenn ich zu sub_types_id als null sende. Es funktioniert nicht.

Wie kann ich dieses Problem lösen?

Antwort

1

Verwenden Sie einen Mysql spaceship Operator, <=>

AND p.sub_types_id <=> :sub_types 
+0

große Lösung, vielen Dank! – Nevermore

-1

Verwenden Sie die vordefinierte Konstante PDO::PARAM_NULL, um den Nullwert anzugeben.

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