PDA

Ver la Versión Completa : Se Puede Trabajar FireBird con PHP????


AGAG4
21-06-2005, 03:52:12
Quiero hacer mi primera programa en PHP haciendo una consulta a una tabla de una base de datos, ya instale el Apache 2.054 y el PHP 4 ya realize las configuraciones pertinentes para PHP y el Apache, tengo el siguiente Código que uso para conectarme a la BD y hacer la consulta a una tabla:

<?php
$path = 'c:/Ejemplo/datos/MiBD.gdb';
$usuario = 'SYSDBA';
$password = 'masterkey';
$dbhd = ibase_connect ($path, $usuario, $password);
$sql = 'SELECT * FROM clientes';
$consulta = ibase_query ($dbhd, $sql);
while ($fila = ibase_fetch_object ($consulta))
{
print $fila->email . "\n";
}
ibase_close ($dbhd);?>


Y me lanza en el Internet Explorer los siguientes errores:
Warning: ibase_connect(): unavailable database in C:\Servidor\php\Paginas\QryFireBird1.php on line 5

Warning: ibase_query(): no InterBase link resource supplied in C:\Servidor\php\Paginas\QryFireBird1.php on line 7

Warning: ibase_fetch_object(): supplied argument is not a valid InterBase result resource in C:\Servidor\php\Paginas\QryFireBird1.php on line 8

Warning: ibase_close(): 0 is not a valid InterBase link resource in C:\Servidor\php\Paginas\QryFireBird1.php on line 12

Este ejemplo lo tome de este club....

Que estare haciendo mal????

Agradezco cualquier sugerencia al respecto....

jachguate
21-06-2005, 03:57:34
Que estare haciendo mal????
Warning: ibase_connect(): unavailable database in C:\Servidor\php\Paginas\QryFireBird1.php on line 5


Hola.

Sugiero que el servidor de interbase sea arrancado antes de intentar de nuevo acceder a esta página.

Hasta luego.

;)

AGAG4
22-06-2005, 00:23:21
Hola.

Sugiero que el servidor de interbase sea arrancado antes de intentar de nuevo acceder a esta página.

Hasta luego.

;)
Juan Antonio si te refieres de que debe de estar abierto el Guardian de FireBird antes de acceder a la consulta por php por medio del internet explorer te informo que si siempre tengo abierto el FireBird, he escarbado un poco en el google y veo la misma instrucción para conectarme a una base de datos de INTERBASE por eso pregunto si se puede conectar a FireBird ya se que este úlimo es hijo de Interbase pero como es la primera vez que intento hacer consultas por medio de PHP ando viendo cual es la causa de los errores que me muestra, ya revise el php.ini que tengo en c:\windows y tengo habilitado el dll del interbase.... Gracias por su respuesta.

jachguate
22-06-2005, 00:36:24
El mensaje de error es típico de cuando el servidor no está levantado. Si no es eso, pues francamente no tengo idea por ahora.

Mick
22-06-2005, 01:59:20
Prueba a indicar el nombre de la computadora, ejemplo:

$path = 'localhost:c:\Ejemplo\datos\MiBD.gdb';

Otra cosa, los nombres de los campos debes indicarlos en mayusculas, porque asi los devuelve el modulo de interbase, sino php no los encontrará (php es case-sensitive en los nombres de las variables como C) ejemplo:

print $fila->EMAIL . "\n";

Si tienes dudas sobre lo que contiene $fila, puedes probar a hacer un:

print_r($fila);

Que te imprimira todo el contenido del registro $fila incluidos nombres de campos y valores , indicando tambien si la variable se trata de un objeto o un array, etc, bastante util para debugear.

Otra cosa, es aconsejable utilizar ibase_pconnect en lugar de ibase_connect, ya que es muchisimo mas rapido mantener la conexion entre peticiones de paginas, que reconectar en cada peticion.

Mas cosas, es aconsejable que indiques el charset en el ibase_connect,
si tus paginas web van en iso normal:

$ibase_charset = 'ISO8859_1';

Si tus paginas van en UTF-8 (formato que cada vez se utiliza mas sobre todo en paginas que deben poder internacionalizarse ya que permite mostrar los caracteres de cualquier idioma):

$ibase_charset= 'UNICODE_FSS';

Usando firebird esta ultima opcion es muy util, ya que aunque la base de datos originalmente este guardada en ISO8859_1 firebird hace la conversion de forma automatica, devoviendo la informacion directamente en UTF-8.

Saludos

AGAG4
22-06-2005, 02:52:47
Prueba a indicar el nombre de la computadora, ejemplo:

$path = 'localhost:c:\Ejemplo\datos\MiBD.gdb';

Otra cosa, los nombres de los campos debes indicarlos en mayusculas, porque asi los devuelve el modulo de interbase, sino php no los encontrará (php es case-sensitive en los nombres de las variables como C) ejemplo:

print $fila->EMAIL . "\n";

Si tienes dudas sobre lo que contiene $fila, puedes probar a hacer un:

print_r($fila);

Que te imprimira todo el contenido del registro $fila incluidos nombres de campos y valores , indicando tambien si la variable se trata de un objeto o un array, etc, bastante util para debugear.

Otra cosa, es aconsejable utilizar ibase_pconnect en lugar de ibase_connect, ya que es muchisimo mas rapido mantener la conexion entre peticiones de paginas, que reconectar en cada peticion.

Mas cosas, es aconsejable que indiques el charset en el ibase_connect,
si tus paginas web van en iso normal:

$ibase_charset = 'ISO8859_1';

Si tus paginas van en UTF-8 (formato que cada vez se utiliza mas sobre todo en paginas que deben poder internacionalizarse ya que permite mostrar los caracteres de cualquier idioma):

$ibase_charset= 'UNICODE_FSS';

Usando firebird esta ultima opcion es muy util, ya que aunque la base de datos originalmente este guardada en ISO8859_1 firebird hace la conversion de forma automatica, devoviendo la informacion directamente en UTF-8.

SaludosYa puse el nombre de la PC antes dela Ruta de la BD (NombrePc:c:\PHP\BD.gdb), cambie ibase_connect por ibase_pconnect, añadí
$ibase_charset= 'UNICODE_FSS'; en la Ruta de la Base de Datos Probe usando las 2 Diagonales (/ \), pero ahora me pone la Página en BLANCO ni siquiera me pone ningún Error, Ahora que estará pasando????

Gracias por sus Respuestas....

Mick
22-06-2005, 12:19:23
Si te sale una pagina en blanco, no hay errores y el script se ha ejecutado correctamente.
Simplemente el resultado de la query no ha devuelto datos, por eso no hay nada que mostrar.
Prueba a debugear un poco poniendo echo(s) y print_r(s) para ver
por donde va el fllujo del programa.

Saludos
Miguel

AGAG4
22-06-2005, 17:34:45
Voy a investigar un poco en debugear con echo(s) y print_r(s)...

Gracias

Que Tenga Buen Día....

AGAG4
22-06-2005, 22:42:40
Asi es, como me lo menciono Mick, estaba bien las instrucciones pero sólo me faltaba mandar a imprimirlo por pantalla, quedo de la siguiente manera con echo:

....
while ($fila = ibase_fetch_object ($sth))
{
echo $fila->CAMPO1 . " " . $fila->CAMPO2 . "<br>";
}
....


Muchas Gracias Mick....

Que Tengan Buen Día....

JXJ
15-10-2005, 20:40:21
AGAG4

¿Puedes poner el codigo completo corregido. ?

no encuentro donde insertaste el codigo que muestras.
imprimiendo con echo

vale gracias

JXJ
16-10-2005, 04:15:50
Hice pruebas. por que tengo interes en usar
firebird, php y apache juntos

Tome tu codigo y le cambien unas cosas.
Esto es la direccion deonde tengo la base de datos y nombre
$path = 'C:\EMPLOYEE.FDB';
La tabla se llama EMPLOYEE
$sql = 'SELECT * FROM EMPLOYEE';
y la fila
print $fila->EMP_NO . "\n";
solo cambien los datos y funcionara.

-------------------------

<?php
$path = 'C:\EMPLOYEE.FDB';
$usuario = 'SYSDBA';
$password = 'masterkey';
$dbhd = ibase_connect ($path, $usuario, $password);
$sql = 'SELECT * FROM EMPLOYEE';
$consulta = ibase_query ($dbhd, $sql);
while ($fila = ibase_fetch_object ($consulta))
{
print $fila->EMP_NO . "\n";

}
ibase_close ($dbhd);?>


-----------
Otra cosa a mi me funciono bien. con print y con echo
con print se mostraban los datos
en una sola linea asi
2458911
usando echo se mostraron asi
2
4
5
8
9
11
-----------
Alo mejor a ti te dio error AGAG4, por que no habias
registrado la base de datos.
yo la registre.
Esto para que si a alguien le interesa. lo pongo.