lunes, 12 de septiembre de 2011

Conectarse a Interbase(Firebird) desde PHP

Hoy vamos a probar el acceso a datos con otro gestor: Interbase de Firebird.

Como en el caso de MSSQL vamos a comenzar con la configuración para evitarnos un error muy común : Fatal error: Call to Undefined function...

Lo primero es tener la dll. Vamos a comenzar buscando en el directorio dlls donde tengamos instalado el php para verificar si está allí la dll  php_interbase.dll. Si no se encuentra debes descargarla de internet y copiarla en el directorio antes mencionado.
Una vez que tienes la dll hay que modificar el php.ini. Lo puedes hacer con el notepad. Las modificaciones son muy sencillas.

Buscar la linea 
;extension=php_interbase.dll
Se les quita el ; que tiene delante. Guardas los cambios. Reinicias el Apache y listo.

Importante: Si la dll no estaba en la instalación y te las tuviste que descargar de internet debes cambiar también la linea
extension_dir =  Para poner la dirección donde se encuentran las dlls.

Una vez configurado todo vamos al código.

Existen las funciones especificas para conectarnos:


ibase_connect(BD, login, password)
ibase_pconnect(BD, login, password)

Las diferencias son básicamente las mismas que están explicadas en la entrada Conexión a MySQL desde PHP  para las funciones similares de MySQL.

Vamos entonces el ejemplo para la conexión.
<?

//ver que en estas funciones se da la ruta hasta la base de datos y no el nombre del servidor por lo
// que no hay que utilizar select_db. En el ejemplo la base de datos se llama Prueba y está en el
//servidor  remoto APPS

$DB="APPS\CIENCIAYTECNICA\BaseDatos\Prueba.GDB";
//Voy a utilizar el login y el password que trae Interbase por defecto.
$User="sysdba";
$Pass="masterkey";

@ibase_pconnect($DB,$User,$Pass) or die("Error al conectarse a la base de datos") ;

?>
Mi Recomedación: Reitero la recomendación que di en la entrada anterior. Creo que es mejor tener el código de conexión en un archivo aparte y referenciarlo de cada una de las páginas donde se necesite luego. De esta forma ante cualquier cambio en los datos de conexión como nombre del servidor, login o password, solo hay que realizar los cambios en un archivo.

Una vez conectados podemos realizar las consultas a la base de datos, ya sea INSERT, UPDATE, SELECT, DELETE. Para todas se utiliza la misma sentencia ibase_query($conexion, $cadenaconsulta) solo cambia la cadena de la consulta. Fíjese que a diferencia de las funciones similares de MSSQL y MySQL aquí el identificador de conexión se pasa primero y luego la cadena de consulta. Si no se pasa ningún identificador de conexión por defecto toma la última conexión abierta.

Veamos un ejemplo de consultas a la base de datos:
<?
/* Si como recomendé pusiste tu código de conexión en un archivo aparte lo primero es referenciarlo. Puedes hacerlo con require() o include().*/
include(''../conexion.php'');
//consulto la base de datos
$resultcliente = ibase_query($conexion ,"select NCliente, NombreCliente from clientes"); 
//muestro los resultados
while ($c=ibase_fetch_object($resultcliente)) //como hay varias filas lo pongo dentro de un ciclo
{
     echo $c->NombreCliente; //imprimo los resultados
 }//cierro el while
 //los resultados se pueden mostrar en algún elemento html como listbox, checkbox, etc..
?>

Bueno hasta aquí la entrada de hoy, espero sus comentarios y preguntas al respecto.

Nos vemos mañana para seguir hablando de programación.

11 comentarios:

  1. Muy buen post .. Yeny tienes algun ejemplo para poder probarlo ?

    Gracias de antemano

    ResponderEliminar
    Respuestas
    1. Jean Carlos necesitas un ejemplo de algo específico? Dame más detalles para poder ayudarte. Si quieres envíame tu correo y nos comunicamos.

      Saludos!!

      Eliminar
  2. Yeny, tengo una duda , tengo el servidor de ibase conectado a internet con ip fija (con win server y sin apache), puedo desde mi sitio web conectar a ese servidor ? (los intentos fueron fallidos) o es necesario que mi sitio este en esa misma pc con apache y php ? porque veo q la ruta a la db siempre es local, buen post, saludos!

    ResponderEliminar
    Respuestas
    1. Hola Ernesto, primero disculpa la demora al responder...mira los ejemplos son locales pero si puedes conectarte remotamente desde php a interbase solo debes poner la ruta completa hasta tu BD , los problemas más comunes son por el firewall de windows, los permisos de acceso en el servidor para el usuario que usas para conectarte a la BD o algun errorsito en la ruta hacia tu BD. Estás trabajando con Firebird??? Saludos

      Eliminar
  3. no exactamente, pero el sistema de gestion que usamos usa db firebird y estoy con problemas a la hora de implementar un carro de compras en nuestra pagina web, nunca habia usado firebird y estoy muy perdido jajaj, pero es bueno saber que se puede ! en realidad estoy perdido en cuanto a la implementacion , aun ni me pongo a pensar como hacer una consulta, aver si entendi....tendrian q crear un usuario de db y junto con eso un usuario de windows con los permisos q correspondan, y una vez hecho eso ahi prodia ya conectar en teoria ? y una pregunta mas, al usuario de db es posible setearlo para que solo pueda hacer consultas de lectura y no escritura ? gracias por tu respuesta !!!!!

    ResponderEliminar
    Respuestas
    1. Mira en la base de datos puedes crear un usuario y a ese usuario le das los permisos que requiera que pueden ser de solo lectura, y para conectarte utilizas ese usuario con su contraseña, el usuario de windows no es necesario solo debes revisar que el server permite conexiones remotas, a veces el firewall impide que te conectes remotamente. Si prefieres enviame el código que estas utilizando para conectarte y el error que te da a ver si vemos que está pasando. Saludos!!

      Eliminar
    2. barbaro ! , este finde me pondre a probar un poquito, pedire q me creen un usuario y te molestare nuevamente, MIL GRACIAS !!!!

      Eliminar
  4. Hola Yeny , te felicito por tu pagina.

    me gustaría saber si tienes un ejemplo de como inserta datos con php a una BD Firebird

    Gracias

    ResponderEliminar
    Respuestas
    1. Hola Leonardo:
      Suponiendo q estamos conectándonos a la misma BD del ejemplo del blog $DB="APPS\CIENCIAYTECNICA\BaseDatos\Prueba.GDB";
      $User="sysdba";
      $Pass="masterkey";
      $conexion=@ibase_pconnect($DB,$User,$Pass) or die("Error al conectarse a la base de datos") ;
      Una vez conectado para insertar registros en la BD, utilizas ibase_query($conexion, $cadenaconsulta), esta función te sirve para cualquier tipo de consulta sea insert, update, delete o select.
      Suponiendo q tienes una tabla persona con los campos nombre y edad y quieres insertar a Pedro de 20 años quedaría
      ibase_query($conexion, "INSERT into persona (nombre, edad) values ('Pedro', '20' )" )

      Eliminar
  5. muy buen post yeny solo una pregunta si podrias ayudarme tengo una programa de inventararios y facturacion comercial y maneja una base de datos de firebird y tenguna una pagina web en la cual promociono mis productos que esta en mysql la pregunta es como relacionar o sincronizar esas tablas o bases de datos diferentes para que al mover inventario en el gestor de firebird se refreje el de mysql... no se si me explique bien gracias por tu ayuda :)

    ResponderEliminar
  6. Hola Angel.
    si lo que necesitas es tener la información de tu inventario en ambas bases de datos, tienes dos vías: la manual y la automática. Por manual me refiero a que en el código de tu programa de inventarios cada vez que se actualiza algún articulo no solo lo actualices en tu BD firebird sino que también te conectes a tu BD mysql y actualizas en ella el campo correspondiente...esta tiene como inconveniente que puede afectar el rendimiento de tu programa o marcarte errores externos al mismo, si cambian por ejemplo los parámetros de conexión de la BD MySQL, etc, además tendrías que ponerte a cambiar un código que presumo ya tienes funcionando y en optimas condiciones...Por otro lado la manera automática, a mi entender la más optima, sería replicando tu base de datos firebird hacia tu base de datos mysql, hay varias herramientas que te permiten hacerlo seria cuestión de que veas las características de cada una y elijas cual viene bien con tu proyecto y te sea más fácil de implementar sin afectar lo que ya tienes funcionando. En las herramientas de sincronización de base de datos puedes elegir si se van a sincronizar cada vez q se realice un cambio o solo una vez al dia por ejemplo o a determinada hora etc...realmente creo q esta es la mejor opción para ti pq seria una cuestión de configuarar la herramienta q elijas y listo, no afectamos lo que ya tenemos...espero te sirva...mucha suerte!!!

    ResponderEliminar