Entradas en "github"

BananaDB: MySQL desde PHP

Como mucha gente me la está pidiendo y va pasando de mano en mano rulando por ahí, he decidido liberar y subir a GitHub una pequeña clase que hice hace unos meses para manejar el driver MySQLi de PHP. Se llama BananaDB (porque es un nombre que mola, y porque las siglas BDB pueden decirse en al menos dos idiomas (Banana DataBases o Bases de Datos Banana).

BananaDB

Estaréis pensando que librerías con el mismo propósito hay muchas, y es cierto. Pero me lancé a escribir la mía propia (sin muchas ganas, no me gusta rehacer la rueda si no es por diversión) porque ninguna de cuantas he probado cumple con los requisitos que yo considero esenciales. Todas ensucian mucho el código y algunas no ofrecen características esenciales para mí como las sentencias preparadas o la posibilidad de acceder al driver directamente. Esto no sólo ocurre con las librerías especializadas, cuando veo las clases controladoras de Bases de Datos que usan los grandes CMS de hoy en día es peor; y no sé si reír o llorar.

No tenía mucho tiempo para hacerla, así que es bastante sencilla. Faltan algunas features por implementar (nada que yo haya llegado a necesitar, claro). Seguramente tenga errores [ pero ahora podéis mandarme un pull request y corregirlos 🙂 o incluso completar las features que faltan 🙂 🙂 ]. La publico tal cual está. Sin testear demasiado. Pero en cualquier caso, creo que es mejor que lo que hay…

Mis metas esenciales eran (mejor explicadas, junto a otras colaterales, en la página de GitHub):

  • Escribir sentencias SQL directamente: Sin métodos, ni palabras que mezclasen las consultas. De forma que el código se mantuviera legible.
  • Poder usar sentencias preparadas (prepared statements) de forma transparente.

Repositorio y descarga

Tenéis la documentación y el código en GitHub.
O si lo preferís, un enlace al código directamente.

Sobre el desarrollo

Escribiendo la clase ha habido algunos retos interesantes que no me esperaba encontrar.

Uno muy sencillo de resolver es la concatenación de métodos en cierto orden y formando una cadena infinita (and()->and()->or()->…) y la recepción de parámetros en múltiples formatos. Creando de esta forma la sintaxis básica de uso de la clase. Tal que así:

$name=$bd->select("name")->from("fruits")->
      where("price > 100")->and("id < ", $max_id)->
      or("color = ", $color)->and ...

La llamada a un método usando como parámetros los elementos de un array (requiriendo el uso de clases reflexivas (eval no existe)) o saltarse la limitación de poder enviar opcionalmente referencias durante la llamada a un método (algo que en antiguas versiones de PHP sí se podía hacer) son otras restricciones que ha sido divertido sortear. Más que por complejidad, por demostrar una vez más lo estúpido que resulta poner limitaciones a un lenguaje (el caso de las referencias es sangrante) cuando puedes saltártelas igualmente si tienes un poco de imaginación…

Leer más