Hola,
Yo lo haría de esta forma y me ahorraría mucho código, y de esta forma puedo chequear 'todas' las combinaciones en un solo select,
pero es solamente mi opinión:
Código:
select * from personas, contrato, evento
where
personas.cedula = contrato.cedula_beneficiarioc and
personas.cedula = evento.cedula_beneficiario and
('$barrio_evento' = '' or evento.barrio like '%$barrio_evento%') and
('$comuna_evento' = '' or evento.comuna like '%$comuna_evento%') and
('$estado_atencion' = '' or personas.estado_atencion like '%$estado_atencion%') and
('$tipo_evacuacion' = '' or evento.tipo_evacuacion like '%$tipo_evacuacion%')
(Las combinaciones de 3 opciones usando 'if...else', es el factorial de 3 = 6 variaciones, pero con más opciones crece exponencialmente)
Saludos,