Una forma sería tener toda la parte del WHERE en una variable separada del resto de la consulta (ya que es básicamente la parte "modificable" de la consulta), así, al momento de añadir una nueva condición compruebas, si la variable está vacía, no agregar "AND", si lo está, agregar "AND".
Espero hayas entendido la idea

.