Non credo sia un problema di SQL. Fai una prova immettendo direttamente le variabili senza usare la funzione. La segnalazione di errore non indica quale '1' provoca l'errore (e non zero).
Penso che il problema sia nella lettura del file di testo. Con file() al fondo delle righe rimane il carattere new line e/o return.
Prova a mettere nella funzione un trim() alla variabile che estrai con foreach . Puo' essere che in presenza di un \r\n la funzione substr() sbagli la rimozione dei caratteri di coda.
codice:foreach($sql as $k=>$v) { $n = trim($v);