Zend Db versus PEAR::MDB2
Mientras trabajo en el código que pronto moverá los engranajes de este dominio me veo enfrentado a la decisión de abstracción de base de datos: ¿Zend Db o PEAR::MDB2?
Son punto por punto iguales. La balanza se estaba inclinando por Zend sólo por su simple instalación (descomprimir e incluir, a diferencia de los impredecibles y crípticos scripts instaladores de PEAR. ¿Por qué no distribuyen un zip?) pero hice un descubrimiento. Existe una fundamental diferencia de filosofías entre Zend Db y PEAR::MDB2 que tiene una repercusión muy concreta en la API.
Usaré PEAR. La razón después del salto.
Zend pareciera apuntar a hacer consultas fáciles y seguras sin problemas de sintaxis. MDB2 intenta normalizar el uso de bases de datos.
Esta diferencia repercute en las características no implementadas en todos los RDBMS.
Por ejemplo: MySQL no implementa secuencias (...yep). Si uno está obligado a usar MySQL (y será el caso en la mayoría de los hosting baratos o gratis) en Zend no puedes usar secuencias pero si autoincremento.
Claro que no todas las bases de datos implementan autoincremento. Luego,tenemos que programar soporte para ambas si lo que necesitamos es controlar la secuencia de inserción. Un cacho.
MDB2 en cambio provee una capa de emulación de ambos secuencias y autoincremento (algo que Zend en su bug tracker proclama IMPOSIBLE) de forma que uno no deba preocuparse de si lo implementa o no, sino simplemente si la API de MDB2 lo ofrece. Se programa una vez, funciona siempre.
En la práctica la secuencia en MySQL consiste de una simple tabla y una consulta creadas de forma que los IDs obtenidos sean siempre únicos por consulta. Esto es literalmente una secuencia.
Supongo que tendré que encontrar formas cómodas de instalar PEAR, a ver si hay alguna.
--Madster
dos comentarios
igual al principio siempre tenía problemas con los ID de las claves primarias para manejarlos como secuencias (o auto_increment como es mi caso), pero al final encontré que una solución práctica es dejar la clave primaria como auto_increment y luego recuperar el id usando un método (en PHP debería estar también) mysql_insert_id() que devuelve el id del campo auto_increment de la clave primaria, es muy útil para recuperar el id de una inserción (claro que sólo funciona con consultas tipo INSERT) y hasta ahora no he tenido problemas con eso.

De todas formas no he usado ni Zend ni Pear, siempre me acostumbré a manejar las cosas manualmente
NioZero (Email) (URL) - 18 06 09 - 22:35
La idea de Zend Db y Pear es programar indiferentemente del RDBMS, lo que no puede hacerse manualmente en PHP ya que te pide llamar al driver correcto directamente. Sin una abstracción no puedes cambiar el RDBMS sin tener que sumirte en un costoso refactoring.
Madster - 18 06 09 - 23:34