I huvudsak kan du inte mata ut CSV-filen och länken till den på en gång. (Du måste introducera begreppet "läge" på sidan och aktivera nedladdningsläget via en ...pagename.php?mode=download eller liknande. Du kan sedan använda PHPs switch-sats för att aktivera $_GET['mode'] i ditt manus.)
Som sagt, rubriken för text/csv-innehållstyp du använde är korrekt, även om du kanske också vill mata ut rubrikerna Content-Length och Content-Disposition. När du har matat ut fildata, se också till att stoppa all ytterligare skriptbehandling via PHPs exit
funktion.
Dessutom skulle det förmodligen vara mycket mindre krångel (och kommer säkert att vara snabbare/mer minneseffektivt) att använda MySQL VÄLJ ... TILL UTFIL anläggning (om du har behörighet) istället för att använda PHP för att samla in data.