A la hora de programar una aplicación, lo mejor, según nos han enseñado en la carrera, es dividir, de ahí lo de «divide y vencerás». Dividir todas las funcionalidades en paquetes, clases, o lo que sea, para luego ir utilizando cada parte de forma independiente pero comunicándose con las demás mediante su interfaz bien definida.
Esto se puede aplicar al acceso a los datos dentro de cualquier aplicación, es decir, utilizar una clase con una buena interfaz para el acceso a las bases de datos.
En un principio, como mi desarrollo actual es PHP, desarrollé una clase abstracta llamada DBManager para el acceso a las bases de datos con todas las funciones necesarias para el manejo de los mismos: query(), fetch(), exec(), etc.
De esta clase abstracta derivaba una clase por cada tipo de base de datos a la que se podía acceder: MySQLManager, PostgreSQLManager, FirebirdManager, etc. Así basta con instanciar la clase que necesites en una variable del tipo de clase abstracta y ya existe un método único para acceder a todos los tipos de bases de datos, más o menos de la misma forma como funcionan las interfaces en Java.
Pero desde PHP 5 existe un módulo similar llamado PDO, donde se puede instanciar una variable de tipo PDO con una serie de parámetros para el acceso al tipo de base de datos que se necesite. Por ejemplo, para MySQL sería así:
try {
$dbm = new PDO(“mysql:host=localhost;dbname=test”,$user,$password);
foreach($dbm->query(“select * from A;”) as $row) {
print_r($row);
}
} catch(Exception $e) {
die(“Exception: “.$e->getMessage());
}
$dbm = null;
En una instalación nueva de PHP, esto no viene activado y hay que ponerlo manualmente. En Ubuntu, que es donde trabajo ahora mismo, su instalación sería muy sencilla aunque no hay que olvidarse de ningún paquete. En principio hay que instalar PHP 5 y sus correspondientes archivos de desarrollo ya que en estos últimos se encuentra pecl, una aplicación para la instalación de extensiones para PHP.
root:~:$ apt-get install php5 php5-dev php-pear
A continuación es necesario instalar el soporte para PDO en nuestro PHP:
root:~:$ pecl install pdo
Con esto tenemos dicho soporte que, además, hay que añadir al archivo php.ini de nuestra configuración, ya sea para Apache, para CGI o para CLI de la siguiente forma:
extension=pdo.so
Además, ya que PDO sólo es la interfaz de las clases de manejo de las bases de datos, hay que instalar los controladores de cada base de datos de forma independiente. Por ejemplo, para MySQL sería de la siguiente forma:
root:~:$ pecl install pdo_mysql
Estos controladores se descargan y se compilan cuando se instalan, por lo que es necesario tener instalados en el sistema los archivos de desarrollo de cada base de datos. Para MySQL tendría que estar instalado el paquete libmysqlclientXX-dev donde XX es el número de versión.
Para PostgreSQL, la instalación del controlador sería:
root:~:$ pecl install pdo_pgsql
Teniendo que tener instalados los archivos de desarrollo de PostgreSQL que se encuentran en el paquete postgresql-dev.
Una vez hecho esto, hay que añadir al archivo php.ini las correspondientes líneas para activar las extensiones:
extension=pdo_mysql.so
extension=pdo_pgsql.so
Posteriormente reiniciamos el servidor Apache para que se carguen dichas extensiones y tener soporte:
root:~:$ /etc/init.d/apache2 restart
Para probarlo se puede hacer un script en PHP con el código anterior, meterlo en el Apache y listo. Eso sí, la base de datos y la tabla referenciada tienen que existir así como el usuario y contraseña de la base de datos. De todas formas, aunque no existan, este código también sirve para comprobar si PDO está activado en nuestro servidor y también si el controlador utilizado (mysql, pgsql, firebird, etc.) está cargado.
Con esto ya tenemos soporte para PDO en todas nuestras páginas Web realizadas en PHP. A partir de aquí sólo hay que construir los objetos de negocio y utilizar esta clase para el acceso a los datos de los mismos.
Pero aunque esto está muy bien, yo recomiendo utilizar, además, un framework de desarrollo que siga el modelo MVC. Lo complicado es elegir cual. De todas formas este es un buen primer paso
.