Archive

Posts Tagged ‘php’

Trabajar con MySQL y utf-8 en PHP

December 13th, 2011

Ayer mientras trabajábamos en la nueva versión de mivecindad.com tuvimos que importar al modelo de datos el listado de países del mundo en varios idiomas. Esta información la obtuvimos de Geonames en formato XML (también hay otros formatos). La primera opción fue usar LOAD XML de MySQL, pero la versión de MySQL que tenía en mi entorno no soportaba este comando. Fue entonces cuando decidí hacer un pequeño script en PHP para procesar el archivo XML y posteriormente insertarlo en la base de datos. De ahí obtuve el SQL que podré reutilizar en otros proyectos y compartirlo con nuestros compañeros de Toolea.

El motivo de escribir esta pequeña entrada es para que no se me olvide que si queremos trabajar con MySQL y utf-8, y lo hacemos usando en API de PHP (sin librerías ni frameworks) no se nos puede olvidar indicar que nuestra sesión con MySQL (que actúa de cliente) use utf-8. Por muy a pesar de que MySQL tenga configurado en el servidor que su encoding por defecto sea utf-8. Eso sirve, entre otras cosas, para la creación de nuevos esquemas.

Os dejo un ejemplo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
$xml = simplexml_load_file('/home/recena/countries_es.xml');
$link =  mysql_connect('localhost', 'root', '');
mysql_select_db('mivecindad', $link);
if(!$link) {
    die('No pudo conectarse: ' . mysql_error());
}
mysql_query("SET NAMES 'utf8';");
foreach($xml as $key => $value) {
    $capital = mysql_real_escape_string($value->capital);
    $sql = "INSERT INTO MV_PAIS (CAPITAL) VALUES('".$capital."')";
    $result = mysql_query($sql);
    if(!$result) {
        die('Invalid query: ' . mysql_error());
    }
}
mysql_close($link);
Categories: Programación Tags: , ,

Librerías para trabajar con JSON en PHP

April 2nd, 2011

La semana pasada, mientras trabajaba en el sitio web de mivecindad.com necesité trabajar con JSON dado que la capa de servicios que tiene la aplicación así lo requiere. La comunicación entre el sitio web y la aplicación es muy básica, un formulario recoge los datos para registrar una comunidad, se genera el JSON, se envía y posteriormente se valida el resultado de la operación.

Para el sitio web estamos usando yii framework y el pequeño modelo (datos) que necesitamos (persona, dirección, comunidad) se construye según la propuesta del framework. Me dejé llevar pensado que luego tendría la posibilidad de generar mi JSON según lo requiere el servicio y me encontré bastante limitado.

En mi entorno de desarrollo tengo compilado PHP con soporte (nativo, parte del core de PHP) para JSON. Lo probé, no conseguí hacer lo que necesitaba sin reinventar la rueda en el framework, y decidí buscar algo de información para conocer qué otras opciones tenía. La idea era encontrar alguna librería que me permitiese manipular JSON con mayor flexibilidad.

  1. Extensión de PECL. Realmente no es una opción porque esta extensión es la que ahora forma parte del core de PHP y está muy limitada.
  2. Service JSON. Un paquete de PEAR cuya última versión fue publicada a comienzos de este año. Al igual que la anterior, muy limitada.
  3. Zend_JSON. Realmente tampoco era una opción porque no estoy usando Zend framework, pero es bueno saber que está ahí.

Hay algunas (pocas) opciones más pero ninguna hacía lo que necesitaba. Tengo que reconocer que vengo muy condicionado porque en Java sí existen librerías que permiten una mayor manipulación en la codificación. Concretamente en nuestros últimos proyectos estamos usando FlexJSON (v.2.0b4, aunque ya está publicada la v2.1).

¿Realicé una mala búsqueda de información o realmente lo que está publicado se limita a decode/encode? Cualquier sugerencia será bienvenida para completar esta pequeña entrada en el blog.

Finalmente decidí hacer algo muy simple pero no por ello menos eficaz. Comprobé que si en lugar de trabajar con objetos, trabajaba con un array asociativo, podía obtener el JSON que necesitaba, por lo tanto, creé dicho array a partir de los datos almacenados en el modelo (clases de yii framework). Dejo una última referencia con una comparativa interesante.

Categories: Programación Tags: ,

Switch to our mobile site