echo $mi_elemento
ERROR: Invalid argument supplied for foreach()
Para evitarlo es tan sencillo como "castear" como array la variable sobre la que iteramos:
echo $mi_elemento
}
Con este sencillo truco ya no aparecerá más el error en el log.
Intentando arrojar un poco de luz a problemas que puedes encontrarte. Especialmente con PostgreSql
En el siglo XXI, todos los sistemas operativos modernos soportan caracteres multibyte (UTF8, UTF16...), las bases de datos es buena idea crearlas también con un juego de caracteres que posteriormente pueda albergar textos en cualquier idioma.
En el caso de Postgres lo ideal es crear la base de datos así:
Una vez guardados los datos podemos recuperarlos con distintos juegos de caracteres, cambiando la variable de entorno client_encoding. Por ejemplo dentro de psql si quieres saber que client_encoding tienes actualmente teclea:
Si queremos forzar la codificación a otro juego de caracteres, como por ejemplo "latin1" usariamos set client_encoding:
Todo esto está muy bien, porque a veces tienes que extraer datos de la base de datos para incorporarlos a otras bases de datos o aplicaciones.
Imaginaos que tenéis que enviar datos a un sistema muy antiguo, que no soporta la codificación utf8, yo intenté infructuosamente extraerlos a través de una consulta programada en un script bash, usando client_encoding.
Por si os encontráis en la misma situación, os recomiendo que no hagais client_encoding en las consultas y que las hagais en UTF8 de forma normal. Cuando tengais los ficheros generados, entonces aplicar la conversión de juegos de caracteres usando iconv, una función de Linux, que funciona del siguiente modo: