Uso de más SQL y PDO en CodeIgniter

Lengua CodeIgniter

Cómo usar sentencias SQL elaboradas para trabajar con la base de datos en CodeIgniter. Y cómo usar las clases PDO que nos proporciona PHP de una forma más cómoda.

Introducción

CodeIgniter es un framework MVC ligero en PHP. CodeIgniter ofrece un buen sistema de acceso a la base de datos. La idea que persigo es tener una forma alternativa y simultánea de acceder a la BD. Me resulta más cómodo realizar toda la consulta en el lenguaje SQL y ejecutarla luego con PDO. Y aún me resulta más sencillo usar PDO con una clase propia a la que que he llamado Pedeo.

Podré acceder a los datos mediante tres posibilidades: 1) usar el sistema propio de CodeIgniter, 2) usar PDO o 3) usar mi propia clase.

Configuración

Archivo: application/config/database.php

Se trata de tener doble configuración con MySQLi y con PDO.


$db['default'] = array(
  'dsn'	=> '',
  'hostname' => 'localhost',
  'username' => 'usuario',
  'password' => 'password',
  'database' => 'database',
  'dbdriver' => 'mysqli',
  'dbprefix' => '',
  'pconnect' => FALSE,
  'db_debug' => (ENVIRONMENT !== 'production'),
  'cache_on' => FALSE,
  'cachedir' => '',
  'char_set' => 'utf8',
  'dbcollat' => 'utf8_general_ci',
  'swap_pre' => '',
  'encrypt' => FALSE,
  'compress' => FALSE,
  'stricton' => FALSE,
  'failover' => array(),
  'save_queries' => TRUE
);

$db['pdo'] = array(
  'dsn'	=> 'mysql:host='.$db['default']['hostname'].';dbname='.$db['default']['database'].';charset='.$db['default']['char_set'],
  'hostname' => '',
  'username' => $db['default']['username'],
  'password' => $db['default']['password'],
  'database' => '',
  'dbdriver' => 'pdo',
  'dbprefix' => '',
  'pconnect' => FALSE,
  'db_debug' => (ENVIRONMENT !== 'production'),
  'cache_on' => FALSE,
  'cachedir' => '',
  'char_set' => 'utf8',
  'dbcollat' => 'utf8_general_ci',
  'swap_pre' => '',
  'encrypt' => FALSE,
  'compress' => FALSE,
  'stricton' => FALSE,
  'failover' => array(),
  'save_queries' => TRUE
);

Biblioteca Pedeo

Archivo: application/libraries/Pedeo.php

Los parámetros a los métodos se pueden pasar de 3 formas distintas:

  • Parámetros variables → Adecuado para parámetros SQL de posición ?
  • Un array indexado → Ídem.
  • Un array asociativo → Adecuado para parámetros SQL por nombre :nombre1, :nombre2, etc.

Métodos

  • queryTable(sql, ...params) — Retorna un array indexado de arrays asociativos
  • queryAssoc(sql, ...params) — Retorna un array asociativo: el 1er campo es la clave y el 2do el valor
  • queryGroup(sql, ...params) — Array asociativo del 1er campo de arrays indexados de arrays asociativos
  • queryValue(sql, ...params) — Retorna la primera columna de la primera fila
  • queryRow(sql, ...params) — Retorna la primera fila en un array asociativo

  • insertRow(sql, ...params) — Inserta un fila y retorna el id de la fila insertada
  • updateRow(sql, ...params) — Actualiza una fila y retorna el número de filas afectadas
  • deleteRow(sql, id) — Borra una fila y retorna el número de filas afectadas

Cómo usarlo en el modelo

Archivo: application/models/Ejemplomodel.php

Declaramos un atributo pdo. En el constructor cargamos la configuración llamada pdo de la base de datos. Obtenemos el objeto pdo a partir del atributo conn_id. Cargamos la biblioteca Pedeo a partir del objeto pdo.


defined('BASEPATH') OR exit('No direct script access allowed');

class Ejemplomodel extends CI_Model {

  private $pdo; 

  public function __construct() {
    parent::__construct();
    $this->pdo = $this->load->database('pdo', true)->conn_id;
    $this->load->library('pedeo', [$this->pdo]);
  }

  ...

  public function getDatosEjemplo($filtro) {
    $sql = "SELECT campos...
      FROM tabla INNER JOIN enlaces...
      WHERE condiciones... AND campo = ?
      ORDER BY ordenación...";
    return $this->pedeo->queryTable($sql, $filtro);
  }

  ...

}

Enlaces

CodeIgniter with PDO — CodeByJeff.com

Comentarios

  1. 1 shernandez 2018-09-19 Hace 10 meses
    Excelente tutorial !!
Proinf.net, ©2003-2019 ci 3.1.10 (CC) Esta obra está bajo una licencia de Creative Commons Este software está sujeto a la CC-GNU GPL