diff --git a/application/libraries/Omeka/Db/Table.php b/application/libraries/Omeka/Db/Table.php index eaf55ed09d..157229db54 100644 --- a/application/libraries/Omeka/Db/Table.php +++ b/application/libraries/Omeka/Db/Table.php @@ -366,9 +366,27 @@ public function applySearchFilters($select, $params) foreach($columns as $column) { if(array_key_exists($column, $params)) { if (is_array($params[$column])) { - $select->where("`$alias`.`$column` IN (?)", $params[$column]); + // empty IN() breaks SQL + if (empty($params[$column])) { + continue; + } + $nullIndex = array_search(null, $params[$column], true); + $where = "`$alias`.`$column` IN (?)"; + if ($nullIndex !== false) { + unset($params[$column][$nullIndex]); + if (empty($params[$column])) { + $where = "`$alias`.`$column` IS NULL"; + } else { + $where .= " OR `$alias`.`$column` IS NULL"; + } + } + $select->where($where, $params[$column]); } else { - $select->where("`$alias`.`$column` = ?", $params[$column]); + if ($params[$column] === null) { + $select->where("`$alias`.`$column` IS NULL"); + } else { + $select->where("`$alias`.`$column` = ?", $params[$column]); + } } } }