# Bases de datos

## PHP y bases de datos

Cuando una aplicación web necesita conservar información de forma permanente para recuperarla posteriormente, suele ser conveniente recurrir a un sistema gestor de bases de datos (SGBD).

Normalmente los SGBD son aplicaciones externas que se instalan y administran de forma separada. PHP permite utilizar la mayoría de los SGBD más conocidos, libres o comerciales (MySQL, Oracle, MS SQL Server, PostgreSQL, Firebird, Ingres, etc) como se puede consultar en el apartado sobre acceso a bases de datos del manual de PHP.

Un caso particular es SQLite, que no es una aplicación externa sino una biblioteca en C que implementa un motor de bases de datos SQL. SQLite estaba disponible en PHP desde junio de 2003 como extensión PECL (para PHP 4.3 y posteriores), y se incluye en el código fuente de PHP desde PHP 5.0 (publicado en agosto de 2004). Eso quiere decir que PHP puede gestionar bases de datos directamente, sin necesidad de recurrir a SGBD externos.

Aunque PHP siempre ha permitido utilizar numerosos SGBD, la forma de hacerlo ha ido variando con el tiempo.

### Acceso mediante bibliotecas específicas

En las primeras versiones de de PHP, la única manera de acceder a un SGBD era a través de una biblioteca específica, que contenía las funciones necesarias. A esas bibliotecas se les suelen llamar también extensiones. En algunos casos esas extensiones se incluían en las distribuciones oficiales de PHP y para poder utilizarlas era suficiente con incluir la directiva correspondiente en el archivo de configuración php.ini. En otros casos esas extensiones no estaban incluidas en las distribuciones oficiales de PHP, pero estaban incluidas en PEAR o PECL y para poder utilizarlas era necesario instalarlas por separado.

Con el paso del tiempo, este enfoque fue mostrando sus limitaciones. El principal inconveniente de este enfoque es que cada extensión está estrechamente vinculada a cada SGBD y si se quiere cambiar de SGBD es necesario reescribir completamente la aplicación (los nombres de cada función son diferentes, el orden de los argumentos distinto, las funcionalidades disponibles son diferentes, etc.). Además en algunos casos, las extensiones no están mantenidas adecuadamente (bugs de seguridad, etc.).

Actualmente (mayo de 2011), PHP se sigue distribuyendo con muchas de estas extensiones y todavía se pueden utilizar, pero en su lugar se recomienda utilizar la biblioteca PDO que se comenta a continuación.

### Acceso mediante PDO

Para poder escribir programas independientes del SGBD elegido, es necesario utilizar una capa de abstracción que permita acceder de una forma común a cualquier SGBD. Esta necesidad no es exclusiva de PHP, sino que afecta a cualquier aplicación que necesita trabajar con un SGBD y no tiene solución completa pues las diferencias entre los SGBD no permiten olvidarse de cuál estamos utilizando realmente.

Una de estas capas de abstracción es ODBC (Open DataBase Connectivity), una API independiente del sistema operativo, lenguaje de programación o SGBD utilizada que se empezó a desarrollar en 1992. En PHP existe una extensión llamada también ODBC que permite conexiones ODBC (creo que esta extensión se incorporó en PHP 3.0, publicado en junio de 1998, en cualquier caso estaba activada en PHP 4.0, publicado en mayo de 2000). El inconveniente de ODBC es que introduce un elemento más en la cadena, el controlador ODBC del sistema operativo, lo que puede ralentizar el rendimiento.

Por eso PHP ha desarrollado su propia capa de abstracción orientada a objetos llamada PDO. PDO se podía utilizar como extensión PECL de PHP 5.0, publicado en agosto de 2004 y está incluida en PHP desde PHP 5.1, publicado en noviembre de 2005. PDO incluye controladores para acceder a las bases de datos más populares y la lista se va ampliando con el tiempo (aunque no incluye todos los SGBD que disponen de extensiones específicas). Utilizando PDO no podemos olvidarnos completamente del SGBD utilizado, pero la mayor parte del código es independiente del SGBD y sólo en algunas partes del programa (en la conexión con el SGBD o en la creación de tablas, por ejemplo) el código es específico del SGBD.

Actualmente (mayo de 2011), la extensión PDO es la biblioteca recomendada para acceder a SGBD..

### En el futuro ...

Existen capas de abstracción de nivel superior a PDO, que permiten en teoría olvidarse completamente del SGBD ya que son capaces de reescribir las sentencias SQL o simular características no presentes en el SGBD. Algunas de estas capas son el paquete PEAR MDB2, o las bibliotecas Doctrine DBAL o Propel.

Actualmente (mayo de 2011) ninguna de estas bibliotecas está incluida en PHP.

Volver al principio de la página

## PHP y MySQL

La primera extensión para acceder a la base de datos MySQL fue la extensión mysql (creo que esta extensión se incorporó en PHP 3.0, publicado en junio de 1998, en cualquier caso estaba activada en PHP 4.0, publicado en mayo de 2000).

La extensión mysql no era capaz de aprovechar características de MySQL 4.1 (publicada en octubre de 2004), así que se creó una nueva extensión mysqli que se incluyó por primera vez en PHP 5.0 (publicada en julio de 2004). Las principales ventajas de esta extensión son la posibilidad de utilizar una sintaxis orientada a objetos, sentencias preparadas, transacciones y otras.

La extensión PDO incluye un controlador para MySQL desde que fue incluido en PHP 5.1, publicado en noviembre de 2005.

Aunque las extensiones mysql y mysqli se incluyen actualmente (mayo de 2011) en PHP, en su lugar se recomienda acceder a MySQL mediante la extensión PDO.

Volver al principio de la página

## PHP y SQLite

PHP dispone de unas extensiones específicas para utilizar SQLite, las extensiones sqlite (disponible como paquete PECL desde junio de 2003 y sqlite3 (disponible como paquete PECL desde enero de 2008, en versión alpha)

La extensión PDO incluye un controlador para SQLite desde que fue incluido en PHP 5.1, publicado en noviembre de 2005.

Aunque la extensión sqlite se incluye actualmente (mayo de 2011) en PHP, en su lugar se recomienda utilizar SQLite mediante la extensión PDO.

Volver al principio de la página

Esta obra está bajo una licencia de Creative Commons.