Firebird y PHP

PHP (Hypertext Preprocessor) es un lenguaje interpretado de alto nivel que se integra a páginas HTML y se ejecuta en el servidor. Es un típico caso de un Server Side Scripts (lenguaje de scripts ejecutados en el servidor) y tiene muchas características, entre las que sobresalen las siguientes:



  • Es de uso libre, así que no hay que pagar licencias.

  • Funciona en varias plataformas, entre ellas: Linux, Solaris y Windows

  • Tiene capacidad de conectarse a las principales bases de datos relacionales, como Oracle, IBM DB2, MS SQL Server, InterBase, Sybase, y muchas más.

  • Tiene un conjunto de comandos muy completo, que permite crear complejos programas, incluso programación orientada a objetos.


Como se ve, es una muy buena herramienta y sin costo, además la independencia de plataforma permite escoger la que mejor se adapte a las necesidades del sistema. Si se combina con herramientas open source, como InterBase, Linux y Apache Web Server, el total de la plataforma de software no tendrá costo.


Mucha gente asocia al uso de PHP con la base de datos MySQL, sin embargo, como lo mencioné antes, se puede conectar con muchas bases de datos, incluyendo InterBase.


Desgraciadamente, no hay mucha documentación sobre el uso de PHP con InterBase, por eso me propuse hacer este artículo, además de que utilizo a diario esta combinación de herramientas, ya que en la actualidad estoy migrando un sitio web que utiliza PHP con Postgres (otra base de datos) a PHP con InterBase.


Antes de empezar, quiero aclarar varias cosas. La primera es que para manejar adecuadamente PHP uno debe conocer bien el lenguaje HTML. Otra es que es muy sencillo de utilizar PHP con InterBase, ya que con unas cuantas instrucciones (3 ó 4) se hace la conexión y la ejecución de SQL. Finalmente, se debe tener instalado PHP para que funcione con InterBase, por medio de una extensión (si usas PHP con Windows) o indicándole la opción –with-interbase=/ruta_de_interbase a la hora de compilar PHP sobre Linux. En otro artículo hablaré más detalladamente sobre la instalación de PHP con InterBase.


La conexión de PHP con InterBase


Lo primero que hay que hacer es realizar la conexión, por medio del comando PHP:


ibase_pconnect(“base_de_datos.gdb”, “USUARIO”, “contraseña”);

donde el primer parámetro es la ruta completa hacia la base de datos, por ejemplo, si estamos utilizando Linux, podría ser algo así:


/opt/interbase/bases/mi_base.gdb

o si usáramos Windows, podría ser algo así:


c:\bases\mi_base.gdb

El segundo parámetro se refiere al usuario. Es cierto, se puede utilizar SYSDBA, aunque siempre recomiendo crear otro usuario y asignarle permisos a la tabla que vamos a acceder, esto es porque en el tercer parámetro debemos de especificar la contraseña del usuario, y no conviene mostrar la contraseña del administrador del sistema (SYSDBA).


No olvides asignar permisos al usuario mediante una orden como esta, suponiendo que el usuario se llama USU_PHP:


GRANT ALL ON TABLAX TO USU_PHP

donde TABLAX es cualquier tabla que vamos a acceder desde el programa PHP.


De esta manera, un ejemplo de conexión quedaría así:


ibase_pconnect(“/opt/interbase/bases/mi_base.gdb”, “USU_PHP”, “usu0189xf”);

Aquí hay que tomar en cuenta esto:


a) Si usas Linux, y usas la versión Classic Server, entonces puedes

crear las bases de datos en cualquier directorio, sólo que debes darle

todos los permisos al archivo con el comando chmod de Linux.


b) Si usas Linux y usas Super Server, entonces la base de datos la

debes crear en un directorio que tenga permisos para el usuario

InterBase.


Cómo ejecutar SQL


Para ejecutar una instrucción SQL, primero deberás haber ejecutado la instrucción ibase_pconnect que se mencionó antes.


La ejecución de una instrucción SQL se hace con la función ibase_query, la cual debes asignar a una variable de PHP:


$Q = ibase_query(“SELECT * FROM TABLAX”);

también puedes ejecutar SQL para insertar, modificar o eliminar:


$Q = ibase_query(“INSERT INTO TABLAX(CAMPO1, CAMPO2) VALUES (‘$valor1′, ‘$valor2′);”);

Obviamente la diferencia es que una instrucción SELECT nos devolverá datos de la tabla, mientras que otra instrucción SQL no lo hará (como INSERT, DELETE o UPDATE).


Para obtener los registros resultantes de una consulta con SELECT, utilizaremos esta instrucción:


$R = ibase_fetch_object($Q);

como se ve, $Q es la variable que se utilizó en la instrucción ibase_query. Cada vez que se ejecuta la instrucción anterior, se va obteniendo un registro de la consulta. Para obtener todos los registros de la consulta, hay que insertarlo en una instrucción while:


while ($R = ibase_fetch_object($Q)) {

echo $R->CAMPO1 . ”

“;

}

Aquí se observan varias cosas: primero, que el ciclo se ejecutará hasta llegar al último registro, únicamente ejecutando varias veces el comando ibase_fetch_object. También hay que poner atención en que el nombre del campo vaya con mayúsculas, ya que si se escribe con minúsculas no va a funcionar.


La instrucción echo envía la expresión a la salida, en este caso la salida es enviada al cliente (navegador web que solicitó la página). El punto significa concatenación y la cadena ”

” sirve para que el navegador lo interprete como un cambio de línea.


Otra aclaración: cuando se ejecute una instrucción de SQL que no sea de consulta (que no sea SELECT), conviene ejecutar la instrucción ibase_commit() para aplicar la transacción y de esta manera se asegure que los cambios fueron efectuados.


Un ejemplo


Para finalizar, haré un pequeño ejemplo de cómo crear una página web. Tomaré como referencia la tabla personas que se creó en el artículo Pasando de Paradox a InterBase, parte 2. Esta es la estructura de la tabla:


CREATE TABLE PERSONAS(

CLAVEPERSONA INTEGER NOT NULL,

NOMBRE VARCHAR(40),

APELLIDOS VARCHAR(40),

TELEFONO VARCHAR(40),

EMAIL VARCHAR(100),

PRIMARY KEY(CLAVEPERSONA)

)

Entonces para desplegar esta tabla crearemos un archivo HTML con código integrado de PHP:


<HTML>

<HEAD></HEAD>

<BODY>

<?php

ibase_pconnect(“/opt/interbase/bases/mi_base.gdb”, “USU_PHP”,

“usu0189xf”);

echo “<TABLE WIDTH=\”100%\” BORDER=\”1\”>;</p>

$Q = ibase_query(“SELECT * FROM PERSONAS;”);

while ($R = ibase_fetch_object($Q)) {

echo “<TR><TD>” . $R->CLAVEPERSONA . “</TD>\n”;

echo “<TD>” . $R->NOMBRE . “</TD>\n”;

echo “<TD>” . $R->APELLIDOS . “</TD></TR>\n”;

}</p>

echo “</TABLE>”;

?></p>

</BODY>

</HTML>

Sé que este artículo es bastante corto y no cubre algunos aspectos básicos como instalación de PHP con Windows o con Linux y activar el soporte a InterBase, pero también estoy consciente que cuando menos ayudará a algunas personas que ya conocen PHP a utilizar las ventajas de InterBase en esta plataforma de desarrollo tan popular, como PHP.


Para más información, el sitio ideal de consulta es la web de PHP: http://www.php.net