Lo que te estoy dando son ejemplos para que veas que hay formas de usar las diversas funciones de fcha que MySQL tiene de modos flexibles.
No tiene ninguna utilidad traer en forma iterativa cada día de un mes, cuando puedes traer el rango completo que conseguirías de todos modos. La diferencia está en que la performance obtenida usando BETWEEN no la vas a superar usando ese for/next que porpones.
En cuanto a lo del mes y año en curso, lo único que necesitas es utilziar las funciones MONTH() y YEAR() para extraer las fechas que necesitas:
No te quedes sólo con lo que te propongo. Fijate
en el manual de referencia y busca cuál es la función o funciones más adecuadas para tu caso, pero en lo posible no hagas consultas iterativas. Son un calvario para la performance.