GUÍA COMPLETA DE FIREBIRD CON PHP

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);
}