Если это не тестовое задание, то проще всего использовать какой-нибудь готовый query builder. А так - использовать prepared statements, динамически создавая плейсхолдеры, а потом вызывая с нужными значениями. Т.е. типа такого
$this->where .= "data BETWEEN :start AND ".($end ? ":end": "NOW()");