2) правильный подход — использовать тут Query Builder который специально придуман для сбора запросов по кусочкам:
$query=$db->select()->from('bands');
if(ищем по году){
$query->where('band.year = ?',$year);
}
Заметь что с Query Builder ты избавляешься от ручной возни с кусками SQL, но при этом данные подставляются через безопасные плейсхолдеры. QB например есть в Zend Framework: http://f...content-available-to-author-only...d.com/manual/1.12/ru/zend.db.select.html
Есть QB в составе Doctrine DBAL: http://d...content-available-to-author-only...s.org/en/latest/reference/query-builder.html
Вот не очень уклюжий QB от Юи: http://w...content-available-to-author-only...k.com/doc/guide/1.1/ru/database.query-builder
Есть такая библиотека, но я с ней не работал: http://f...content-available-to-author-only...o.com/documentation.html#features
Заметь также что если запрос неизменный то удобнее писать его как есть, без QB. Он нужен именно для сборки по частям.