Casi seguramente está mal. Hasta donde alcanzo a comprender, le proporcionas una lista de localidades y con esa lista se crean las categorías. Luego el SQL también debe tener un error, a menos que la tabla donde obtienes los datos se llame barcelona y tenga un campo que se llame 'A'.
En fin, el código que muestras, es casi seguro que tiene errores. No puedo estar del todo seguro, porque muestras un fragmento muy pequeño y no hay contexto, pero en mi experiencia, ese código tiene errores.
Porque no capturas los categoryid que devuelven? No haces comprovaciones de errores y das por supuesto valores en la llamada ultima a crear categorias. Con tan malas practicas de programaciòn no es raro que el codigo falle.