Сделай переменную какая будет в случае чего добавльять опциональные параметры.
Например:
$where = '';
if($_POST['brand']){
$where .= ' brand = ' . $_POST['brand'];
}
$poisks = DB::select("select * from items where ". $where ." && fuel_type IN('$fuel_type') && location = '$location' && body_type IN('$body_type') && year BETWEEN '$year_from' AND '$year_to' && price BETWEEN '$price_from' AND '$price_to' && engine BETWEEN '$engine_from' AND '$engine_to'");
Тут есть косяк с тем, что долен быть хоть какой то параметр require что бы для переменной $where можно было сразу вписать AND и через другие проверки эту переменную разсширать. Просто я хз как проверить будет ли это условие первым и нужно ли добавлсять AND, или оставить WHERE
Не то чтобы по хорошему, но чтобы работало:
$where = '';
if($_POST['brand']){
$where .= 'AND brand = ' . $_POST['brand'];
}
if($_POST['fuel_type']){
$where .= " AND fuel_type IN(". implode(',' , $_POST['fuel_type']) .");
}
$poisks = DB::select("select * from items where (что-то, что всегда будет проверяться) ". $where );