2 min. de lectura (aproximado)

Guía completa de firebird con PHP

(2 min. de lectura) Firebird es una excelente opción para desarrollar aplicaciones con PHP, especialmente cuando se busca alto rendimiento, bajo consumo de recursos y estabilidad.

Requisitos previos

Antes de empezar, asegúrate de tener:
  • Servidor Firebird instalado (versión 3.0 o superior recomendada)
  • PHP 7.4 o superior
  • Extensión PDO_Firebird activada
En Windows:: Agregar en en el fichero "php.ini":

//La extensión tiene que haber sido descargada y guardada en el directorio donde se encuentran las extensiones de php
extension=pdo_firebird
En Linux:

sudo apt install php8.3-interbase php8.3-pdo-firebird

Conexión básica a Firebird

/ config.php
$host = 'localhost';
$database = 'C:/datos/ruta_base_datos.fdb'; // En Linux: /var/lib/firebird/data/mi_base.fdb
$user = 'usuario_base_datos';
$password = 'password_base_datos'; // ¡Cambia esta contraseña en producción!

try {
$pdo = new PDO(
"firebird:dbname=$host:$database;charset=utf8", 
$user, 
$password,
[
  PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
  PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
  PDO::ATTR_EMULATE_PREPARES => false
]
);

echo "Conexión exitosa a Firebird";

} catch (PDOException $e) {
die("Error de conexión: " . $e->getMessage());
}

Ejemplos CRUD

Consultar registros

// Listar clientes
$stmt = $pdo->prepare("SELECT id, nombre, email, fecha_registro 
FROM clientes 
WHERE activo = 1 
ORDER BY nombre");

$stmt->execute();
$clientes = $stmt->fetchAll();

foreach ($clientes as $cliente) {
echo "ID: {$cliente['id']} - {$cliente['nombre']} ({$cliente['email']})
"; }

Insertar registros

$stmt = $pdo->prepare("INSERT INTO clientes (nombre, email, telefono, fecha_registro) 
VALUES (:nombre, :email, :telefono, CURRENT_TIMESTAMP)");

$data = [
':nombre'=> 'Juan Pérez',
':email'=> 'juan@example.com',
':telefono' => '555-123456'
];

try {
$stmt->execute($data);
$nuevoId = $pdo->lastInsertId();
echo "Cliente insertado correctamente. ID: $nuevoId";
} catch (PDOException $e) {
echo "Error al insertar: " . $e->getMessage();
}

Actualizar registros

$stmt = $pdo->prepare("UPDATE clientes 
SET nombre = :nombre, email = :email 
WHERE id = :id");

$stmt->execute([
':nombre' => 'Juan Pérez Gómez',
':email'  => 'juan.nuevo@email.com',
':id' => 15
]);
echo "Registros actualizados: " . $stmt->rowCount();

Eliminar registros

$stmt = $pdo->prepare("DELETE FROM clientes WHERE id = :id");
$stmt->execute([':id' => 10]);

echo "Registros eliminados: " . $stmt->rowCount();

Transacciones

try {
$pdo->beginTransaction();

// Primera operación
$stmt1 = $pdo->prepare("INSERT INTO pedidos (...) VALUES (...)");
$stmt1->execute($datosPedido);

// Segunda operación
$stmt2 = $pdo->prepare("UPDATE inventario SET stock = stock - 1 WHERE producto_id = ?");
$stmt2->execute([$productoId]);

$pdo->commit();
echo "Transacción completada con éxito";

} catch (Exception $e) {
$pdo->rollBack();
echo "Transacción revertida: " . $e->getMessage();
}

Consultas preparadas con FETCH

$stmt = $pdo->prepare("SELECT * FROM clientes WHERE nombre LIKE :busqueda");
$stmt->execute([':busqueda' => '%Juan%']);

while ($row = $stmt->fetch()) {
print_r($row);
}