Louder Developer Zone
Articles, Tutorials and Tips from the community and Louder developers

Usar Firebird/Interbase con Kumbia Enteprise

Publish at Monday, March 29, 2010
By Core Developers - Louder

Firebird es un sistema de administración de base de datos relacional (RDBM) liberado por Borland. Firebird junto con PostgreSQL y MySQL es uno de los motores de base de datos más conocidos de código abierto.

En el presente tutorial veremos como utilizar Firebird con Kumbia Enteprise Framework. Los ejemplos a continuación también pueden ser usados con bases de datos Interbase.

Requerimientos

Kumbia Enterprise utiliza las extensiones "interbase" y "pdo_firebird" de PHP para conectarse a Firebird/Interbase usando la capa nativa, por lo que es necesario que alguna de estas 2 extensiones estén disponibles.

Configurar conexión a Firebird/Interbase

Es posible realizar conexiones a bases de datos Firebird/Interbase usando protocolo TCP/IP ó IPX. Las bases de datos pueden estar alojadas en el mismo servidor ó en recursos remotos. Para configurar la base de datos en el environment.ini se usa la siguiente configuración:


//Usando la extensión php_interbase
[development]
database.type = firebird
database.host = localhost
database.username = sysdba
database.password = masterkey
database.name = "/home/antonio/empresa.fdb"

//Usando la extensión php_pdo_firebird
[development]
database.layer = pdo
database.type = firebird
database.username = sysdba
database.password = masterkey
database.dsn = "dbname=localhost:/home/antonio/empresa.fdb"

Conectarse a Firebird/Interbase

Si se desea realizar una conexión a Firebird directa podemos usar DbLoaded::factory de la siguiente forma:


$db = DbLoader::factory("Firebird", array(
	"host" => "localhost",
	"username" => "sysdba",
	"password" => "masterkey",
	"name" => "/home/antonio/empresa.fdb"
));

Interactuar con la Base de Datos

En el adaptador de Firebird se ha implementado toda la API del componente Db, por lo que se puede usar naturalmente toda su funcionalidad:


//Hacer una consulta
$db->query("SELECT * FROM clientes");
$numeroRegistros = $db->numRows();

//Si hay registros mostrarlos
if($numeroRegistros>0){
	while($cliente = $db->fetchArray()){
		echo $cliente[0], "\n";
		echo $cliente["nombre"], "\n";
	}
}

//Mostrar el segundo cliente
$db->dataSeek(1);
$row = $db->fetchArray();
echo $row["nombre"], "\n";

//La tabla "clientes" existe?
$db->tableExists("clientes");

//Listar todas las tablas de la base de datos
$tablas = $db->listTables();
foreach($tablas as $tabla){
	echo $tabla, "\n";
}

//Consultar los meta-datos de una tabla
$fields = $db->describeTable("clientes");
foreach($fields as $field){
	print_r($field);
}

Implementación de LIMIT

Así como con los demás adaptadores de Db, en Firebird se ha implementado la extensión del lenguaje SQL llamada LIMIT que permite delimitar el número de registros devueltos por la base de datos:


//Hacer una consulta
$sql = $db->limit("SELECT * FROM clientes", 10);
$cursor = $db->query($sql);
$numeroRegistros = $db->numRows($cursor); // 10

Usar Firebird con ActiveRecord

Toda la funcionalidad de ActiveRecord puede ser aprovechada cuando se usan bases de datos Firebird/Interbase. Los niveles de isolación y soporte a transacciones también fueron implementados según este motor. Los generadores (secuencias) también son soportados por ActiveRecord:

Firebird/Interbase no soportan columnas identidad (autonuméricas), en cambio es posible usar generadores. Un generador puede ser creado usando la habitual convención para secuencias NOMBRETABLA_CAMPO_SEQ. Si el campo llave primaria además se llama ID entonces el modelo lo podemos definir así:


class Clientes extends ActiveRecord {

}

Si el campo llave primaria no se llama ID entonces podemos definir el generador así:


class Clientes extends ActiveRecord {

	public function initialize(){
		$this->setIdGenerator("Native", "codigo");
	}

}

Si el generador tiene un nombre diferente a la convención se puede usar un generador nativo para indicar su nombre:


class Clientes extends ActiveRecord {

	public function sequenceName(){
		return "CLIENTES_CODIGO_GEN";
	}

	public function initialize(){
		$this->setIdGenerator("Native", "codigo");
	}

}

Luego se usa el modelo como es habitual:


//Crear un cliente
$cliente = new Clientes();
$cliente->nombre = "David Gomez";
$cliente->fecha = new DbRawValue("CURRENT_TIMESTAMP"); #Colocar la fecha de la base de datos
$cliente->save();

//Mostrar el ID que se asignó al registro desde el generador (secuencia)
echo $cliente->id;

//Mostrar el nombre de todos los clientes
foreach(Clientes::findAll() as $cliente){
	echo $cliente->nombre, "\n";
}

Conclusiones

  • Firebird es un potente motor de código abierto que puede ser aprovechado en Kumbia Enterprise
  • La completa funcionalidad de los componentes Db y ActiveRecord puede ser aprovechada con bases de datos Firebird/Interbase

Si tiene problemas para usar el adaptador de Firebird/Interbase puede obtener soporte de los desarrolladores del framework en nuestro grupo de discusión en google groups.

Tell friends about this article on social networks:



blog comments powered by Disqus

Previous: Implementar Aspectos de Seguridad con KEF Next: Migrar a Kumbia Enteprise de manera sencilla

Colaborate

Colaborate

We invite you to submit articles and tutorials to the Developer Zone.

Archive

  • Mayo 2009

Maybe you are interested

Added value to your Business.

Become a Solution Partner Louder Now.

Bring to the Open-Source retroactively..

Learn more about Shared Louder Labs