Fecha: 2026-10-17 - San Ignacio de Antioquía   Calendario 2026  | Info

Blog Blog

La Clase Database en CodeIgniter 3: Guía Básica y Ejemplo CRUD

Autor: M. Toledo   |   Comentarios: 0

La clase Database de CodeIgniter 3 es una de las librerías más utilizadas del framework. Proporciona una capa de abstracción que facilita la conexión con bases de datos y la ejecución de consultas SQL de forma segura, eficiente y mantenible.

Gracias a sus herramientas integradas, como el Query Builder, las consultas parametrizadas y el soporte para transacciones, los desarrolladores pueden trabajar con bases de datos sin necesidad de escribir constantemente instrucciones SQL complejas.

¿Por qué utilizar la clase Database?

Entre las principales ventajas de la clase Database encontramos:

  • Conexión sencilla a distintos motores de bases de datos.
  • Soporte para MySQL, PostgreSQL, SQLite, SQL Server y otros.
  • Constructor de consultas (Query Builder).
  • Consultas parametrizadas para prevenir ataques de inyección SQL.
  • Gestión de transacciones.
  • Obtención de resultados como objetos o arrays.
  • Mayor legibilidad y mantenimiento del código.

Configuración de la Base de Datos

La configuración principal se realiza en:

application/config/database.php

Ejemplo de configuración para MySQL:

    $db['default'] = array(
    'dsn' => '',
    'hostname' => 'localhost',
    'username' => 'usuario',
    'password' => 'password',
    'database' => 'mi_base_datos',
    'dbdriver' => 'mysqli',
    'dbprefix' => '',
    'pconnect' => FALSE,
    'db_debug' => TRUE,
    'cache_on' => FALSE,
    'char_set' => 'utf8',
    'dbcollat' => 'utf8_general_ci'
    );

Para cargar automáticamente la clase Database en toda la aplicación:

$autoload['libraries'] = array('database');

Archivo:

application/config/autoload.php

También puede cargarse manualmente desde un controlador o modelo:

$this->load->database();


Consultas Básicas

Consulta SQL Directa

    $query = $this->db->query("SELECT * FROM usuarios");
    
    foreach ($query->result() as $row)
    {
    echo $row->nombre;
    }
    

Consulta Parametrizada

Las consultas parametrizadas son recomendables cuando intervienen variables externas.

    $query = $this->db->query(
    "SELECT * FROM usuarios WHERE id = ?",
    array($id)
    );
 

Este método ayuda a evitar vulnerabilidades de inyección SQL.


Utilizando Query Builder

El Query Builder simplifica la generación de consultas SQL.

Seleccionar registros

$query = $this->db->get('usuarios');

Aplicar filtros

   
$query = $this->db
->where('activo', 1)
->get('usuarios');

Insertar registros

$data = array(
'nombre' => 'Juan',
'email' => 'juan@email.com'
);
 
$this->db->insert('usuarios', $data);
Actualizar registros
$data = array(
'email' => 'nuevo@email.com'
);
 
$this->db->where('id', 5);
$this->db->update('usuarios', $data);
Eliminar registros
$this->db->where('id', 5);
$this->db->delete('usuarios');

Gestión de Transacciones

Las transacciones permiten agrupar varias operaciones para garantizar la integridad de los datos.

$this->db->trans_start();
 
$this->db->insert('pedidos', $pedido);
$this->db->insert('facturas', $factura);
 
$this->db->trans_complete();
 
if ($this->db->trans_status() === FALSE)
{
echo "Error en la transacción";
}

Obtención de Resultados

Como objetos

    $resultados = $query->result();

Como arrays

    $resultados = $query->result_array();
    Obtener una sola fila

Ejemplo Práctico de Modelo CRUD

Una de las mejores prácticas en CodeIgniter es centralizar las operaciones sobre la base de datos dentro de los modelos.

Tabla de ejemplo

    CREATE TABLE usuarios (
    id INT AUTO_INCREMENT PRIMARY KEY,
    nombre VARCHAR(100) NOT NULL,
    email VARCHAR(150) NOT NULL,
    activo TINYINT(1) DEFAULT 1
    );

Modelo Usuario_model.php

Ubicación: application/models/Usuario_model.php

Código:
    <?php
    defined('BASEPATH') OR exit('No direct script access allowed');
    
    class Usuario_model extends CI_Model
    {
    private $table = 'usuarios';
    
    public function __construct()
    {
    parent::__construct();
    }
    
    /**
    * Obtener todos los usuarios
    */
    public function get_all()
    {
    return $this->db
    ->order_by('nombre', 'ASC')
    ->get($this->table)
    ->result();
    }
    
    /**
    * Obtener usuario por ID
    */
    public function get_by_id($id)
    {
    return $this->db
    ->where('id', $id)
    ->get($this->table)
    ->row();
    }
    
    /**
    * Insertar usuario
    */
    public function insert($data)
    {
    return $this->db->insert($this->table, $data);
    }
    
    /**
    * Actualizar usuario
    */
    public function update($id, $data)
    {
    return $this->db
    ->where('id', $id)
    ->update($this->table, $data);
    }
    
    /**
    * Eliminar usuario
    */
    public function delete($id)
    {
    return $this->db
    ->where('id', $id)
    ->delete($this->table);
    }
    
    /**
    * Verificar existencia
    */
    public function exists($id)
    {
    return $this->db
    ->where('id', $id)
    ->count_all_results($this->table) > 0;
    }
    
    /**
    * Obtener usuarios activos
    */
    public function get_active_users()
    {
    return $this->db
    ->where('activo', 1)
    ->get($this->table)
    ->result();
    }
    }?>


Uso del Modelo desde un Controlador

Archivo: application/controllers/Usuarios.php

    <?php
    defined('BASEPATH') OR exit('No direct script access allowed');
    
    class Usuarios extends CI_Controller
    {
    public function __construct()
    {
    parent::__construct();
    $this->load->model('Usuario_model');
    }
    
    /**
    * Listar usuarios
    */
    public function index()
    {
    $data['usuarios'] = $this->Usuario_model->get_all();
    
    $this->load->view('usuarios/index', $data);
    }
    
    /**
    * Crear usuario
    */
    public function crear()
    {
    $data = [
    'nombre' => 'Juan Pérez',
    'email' => 'juan@email.com'
    ];
    
    $this->Usuario_model->insert($data);
    }
    
    /**
    * Editar usuario
    */
    public function actualizar($id)
    {
    $data = [
    'email' => 'nuevo@email.com'
    ];
    
    $this->Usuario_model->update($id, $data);
    }
    
    /**
    * Eliminar usuario
    */
    public function eliminar($id)
    {
    $this->Usuario_model->delete($id);
    }
    }
    ?>

Buenas Prácticas al Trabajar con Database

Para aprovechar al máximo la clase Database de CodeIgniter 3, es recomendable seguir estas prácticas:

  • Utilizar Query Builder siempre que sea posible.
  • Evitar concatenar variables directamente en consultas SQL.
  • Emplear consultas parametrizadas para datos introducidos por el usuario.
  • Mantener la lógica de acceso a datos dentro de los modelos.
  • Utilizar transacciones en operaciones críticas.
  • Validar los datos antes de insertarlos o actualizarlos.
  • Crear métodos específicos en el modelo para consultas frecuentes.
    Por ejemplo:
        public function buscar_por_email($email)
        {
        return $this->db
        ->where('email', $email)
        ->get($this->table)
        ->row();
        }
        

Conclusión

La clase Database de CodeIgniter 3 proporciona una solución robusta y sencilla para gestionar bases de datos dentro de aplicaciones web. Su integración con el patrón MVC, junto con herramientas como Query Builder, consultas parametrizadas y soporte para transacciones, permite desarrollar aplicaciones más seguras, mantenibles y escalables.

Además, al encapsular las operaciones CRUD dentro de modelos específicos, se consigue una arquitectura más limpia y profesional, facilitando el mantenimiento y la evolución del proyecto a largo plazo. Para cualquier aplicación desarrollada con CodeIgniter 3, dominar la clase Database es un paso fundamental para construir soluciones eficientes y de calidad.


Su Comentario:

Deje aquí su comentario acerca de este artículo...


Otros artículos del blog

Adapta tu sitio web a la nueva normativa sobre cookies
Atributo download HTML5 para descargar archivos del servidor mediante enlaces
Botón redondeado con CSS
Bucle para recibir todas las variables por POST en PHP
Carga o upload de archivos con CodeIgniter
Columnas múltiples con CSS3
Como evitar la inyección SQL en PHP
Cómo optimizar la etiqueta de título para atraer más tráfico de Google
Como puedo abrir puertos en mi router para acceder remotamente a mi ordenador personal
Contador de caracteres con JQuery
Copias de seguridad avanzadas para bases de datos MySQL
Crear un sticky desplegable en la web
Cuánto cuesta desarrollar un sitio web en España: guía completa de precios en 2026
Detectar el sistema operativo, navegador y versión del cliente
Diseño y desarrollo web a la medida
Ejecutar script automáticamente con Cron en Linux
El elemento meter HTML5
El filtro Blur (desenfoque) en CSS y alguno de sus posibles usos
El filtro Blur (desenfoque) en CSS y alguno de sus posibles usos
El nuevo elemento <picture> de HTML5 para crear imágenes responsive
Elementos fundamentales para trabajar con Codeingniter
Envío de correos o emails con CodeIgniter, guía rápida
Función para extraer la extensión de un archivo con PHP
Guía rápida sobre el elemento br en HTML
Guía rápida sobre el elemento p en HTML
Guía rápida sobre los bordes en CSS
La Clase Database en CodeIgniter 3: Guía Básica y Ejemplo CRUD
La clase DATABASE en Codeigniter de 0 a 100
La etiqueta meta viewport en html5
La relación entre el contenido extenso y el convencimiento del usuario
Las fuentes de Google Font para nuestra web y efectos sobre nuestras fuentes
Lo bueno y lo malo del SEO
Los helpers en CodeIgniter para definir nuestras funciones
Mensaje aceptar cookies para cumplir con la Ley General de Protección de Datos (LGPD)
Meta tags de HTML
Múltiples bordes en un contenedor con CSS
Script para automatizar backups de MySQL en servidores Windows
Streams en PHP
Trucos y ejemplos de configuración del archivo htaccess de Apache
Uso de las páginas de error 404 como soporte estratégico de contenidos
¿Cómo crear una API REST con CodeIgniter?
¿Cómo redimensionar imágenes con CodeIgniter?
¿Qué documentos necesitas para solicitar la ayuda como emigrante retornado?
¿Qué es y para qué sirve un archivo robots.txt?