BlogLa 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.
Entre las principales ventajas de la clase Database encontramos:
La configuración principal se realiza en:
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:
Archivo:
También puede cargarse manualmente desde un controlador o modelo:
$query = $this->db->query("SELECT * FROM usuarios");
foreach ($query->result() as $row)
{
echo $row->nombre;
}
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.
El Query Builder simplifica la generación de consultas SQL.
$query = $this->db->get('usuarios');
$query = $this->db
->where('activo', 1)
->get('usuarios');
$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');
$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";
}
$resultados = $query->result();
$resultados = $query->result_array();
Obtener una sola fila
Una de las mejores prácticas en CodeIgniter es centralizar las operaciones sobre la base de datos dentro de los modelos.
CREATE TABLE usuarios (
id INT AUTO_INCREMENT PRIMARY KEY,
nombre VARCHAR(100) NOT NULL,
email VARCHAR(150) NOT NULL,
activo TINYINT(1) DEFAULT 1
);
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();
}
}?>
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);
}
}
?>
Para aprovechar al máximo la clase Database de CodeIgniter 3, es recomendable seguir estas prácticas:
public function buscar_por_email($email)
{
return $this->db
->where('email', $email)
->get($this->table)
->row();
}
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.Deje aquí su comentario acerca de este artículo...