Database

Gestiona la conexión a la base de datos y sus consultas. Actualmente, el framework utiliza sólo base de datos MySql y MariaDB.

 

Métodos básicos

Database::__construct

En el constructor se realiza la conexión a la base de datos.

public Database::__construct ( array $config = [] )

Salvo los casos en los en que se debe cambiar la base de datos por defecto, se recomienda enfáticamente utilizar una instancia única, a través de la función de fachada db().

 

Métodos heredados

Database::prepare

Este método es practicamente el original de la librería mysqli. Internamente, agrega el prefijo a las tablas y maneja errores.

public Database::prepare ( string $query ): StatementInterface

 

Database::quote

Escapa un valor que será incluido en una consulta.

public Database::quote ( mixed $value ): string
value

El valor a escapar. Se desaconseja su uso en favor de las consultas preparadas.

 

Database::lastInsertId

Devuelve el identificador de la última consulta de inserción.

public Database::lastInsertId ( ): int

 

Consultas que no devuelven resultados

Database::exec

Ejecuta una consulta a la base de datos.

public Database::exec ( string|StatementInterface $stmt, mixed ... $params ): int
stmt

Puede ser una cadena con la consulta o un objeto que implememente StatementInterface.

params

Valores de relleno para las consultas preparadas.

 

Database::execAll

Ejecuta un conjunto de consultas preparadas.

public Database::execAll ( string|StatementInterface $stmt, mixed ...$params ): void
query

Puede ser una cadena con la consulta o un objeto que implememente StatementInterface.

params

Los parámetros que se deseen agregar a la consulta. Si un parámetro es escalar, todas las consultas contendrán dicho parámetro. En cambio, si es un arreglo, cada consulta tendrá el valor en correspondencia con un índice.

 

Consultas que devuelven resultados

Database::query

Ejecuta una consulta a la base de datos y guarda internamente su resultado. Devuelve un objeto del tipo ResultInterface con el que podrá obtener los resultados.

public Database::query ( string|StatementInterface $stmt, mixed ... $params ): ResultInterface
stmt

Puede ser una cadena con la consulta o un objeto que implememente StatementInterface.

params

Valores de relleno para las consultas preparadas.

 

ResultInterface::fetch

Retorna una fila de resultados.

public Database::fetch ( $style = Database::FETCH_ASSOC ): array
style

Una de las constantes de tipo de resultados.

 

ResultInterface::fetchColumn

Devuelve una única columna de la siguiente fila de un conjunto de resultados, o false si no existen más filas.

public ResultInterface::fetchColumn ( int $column_number = 0 ): mixed
column_number

El número de índice de la columna a retornar.

 

ResultInterface::fetchAll

Devuelve un array que contiene todas las filas del conjunto de resultados.

public ResultInterface::fetchAll ( int $style = Database::FETCH_ASSOC, $index = null, array $rows = [] ): array
style

Controla el contenido del array devuelto, tal como en db::fetch().

index

Este parámetro tiene diferentes comportamientos según el parámetro style. Sin perjuicio de lo dicho, es importante aclarar que no es igual al comportamiento que el mismo método en PDO.

En caso de que el parámero style sea db::FETCH_NUM o db::FETCH_ASSOC, las filas tendrán por índice el valor del campo que se indique en este parámetro.

En caso de que el parámero style sea db::FETCH_COLUMN, el index puede tener el valor de la columna o el nombre del campo que se incluirá de cada fila. También, puede ser un array que contenga el par [index => column] o [key => field].

rows

Un array que se utilizará como base.

 

Marcadores de posición

El marcador de posición o placeholder por defecto en MySql es el símbolo de pregunta (?). Además de dicho marcador, a continuación, listaremos otros que pofrán utilizarse, y que son de gran ayuda.

 

Marcador de posición flexible ( ?.. )

Un marcador de posición flexible, simbolizado como ?.., permite variar el número de valores de relleno, según el número de valores que se pasan como parámetro.

En el siguiente ejemplo, se consulta los datos de los usuarios que se pasan a través de un arreglo.

$users = [1, 2, 5, 8];

$db->query("SELECT * FROM `users` WHERE id IN (?..)", $users);
 

Marcador de posición de conjunto ( ?? )

Un marcador de posición de conjunto genera los valores de relleno a partir de arreglos que poseen el par field => value. Se pueden utilizar en sentencias INSERTUPDATE y INSERT .. ON DUPLICATE KEY.

Por ejemplo, si tenemos un conjunto:

$data = ['username' => 'user123', 'email' => 'user123@example.com'];
 

Podemos hacer las siguientes consultas:

$db->exec("INSERT INTO `users` ( ?? ) VALUES ( ?? )", $data) ;
$db->exec("UPDATE `users` SET ?? WHERE id = ?", $data, $user_id) ;
$db->exec("INSERT INTO `users` ( ?? ) VALUES ( ?? ) ON DUPLICATE KEY UPDATE ??", $data) ; 
 

Marcador de posición de búsqueda de texto ( %? )

Este tipo de marcador de posición modifica (y prepara) el valor pasado como parámetro, para ser utilizado de manera más efectiva en las sentencias LIKE ?.

Actualmente, lo que hace el framework es:

  1. si el al texto de búsqueda tiene un carácter, le agregará un comodín % al final, por lo que filtrará todos los valores que comienzan con dicho caracter.
  2. si el texto de búsqueda tiene más de un caracter, agregará en ambos extremos el comodín %, por lo que filtrará los valores que contengan dicho texto.

 

En el siguiente ejemplo, devolverá los usuarios cuyo username comience con la letra m.

$username = 'm';
$db->query("SELECT * FROM `users` WHERE `username` LIKE %?", $username) ;
 

Declaraciones flexibles

Las declaraciones flexibles permiten al framework interactuar con la declaración sql. Para escribir una declaración flexible, se utilizarán corchetes.

 

Ejemplo inicial

En la siguiente consulta, se modifica el orden a través de una variable pasada en el método Database::sort.

$db->sort($sort); // $sort puede ser 'asc' o 'desc'
$db->query("SELECT * FROM `users` ORDER BY name [SORT]");

 

Database::where

Crea la declaración WHERE ... AND ... . En la consulta, se escribe como [WHERE].

Este método permite ingresar parámetros, su uso invalida aquellos parámetros ingresados en los métodos query y exec.

public Database::where ( string $where, ...$params ): void
where

La declaración.

params

Todos los parámetros que requiere la declaración.

 

Buscar en varios campos

En ocaciones, debemos buscar un valor en varios campos, utilizando el operador OR. Para ello, el método incluye una forma abreviada, utilizando la barra vertical (|), y, si se quiere, ingresando una única vez el parámetro.

// lo convencional
$db->where("(firstname = ? OR surname = ?)", $seach, $seach);

// abreviado
$db->where("firstname = ?|surname = ?", $seach);

 

Database::having

Crea la declaración HAVING ... AND .... En la consulta, se escribe como [HAVING].

Este método permite ingresar parámetros, su uso invalida aquellos parámetros ingresados en los métodos query y exec.

public Database::having ( string $having, ...$params ): void
where

La declaración.

params

Todos los parámetros que requiere la declaración.

 

Database::setParam

Cuando se utiliza los métodos where o having, se invalidan los parámetros ingresados en los métodos query y exec. Por lo tanto, este método permite ingresar un parámetro, sin que sea necesaria una declaración flexible.

public db::setParam ( mixed $param ): void
param

El parámetro a ingresar.

 

Database::order

Crea la declaración ORDER BY .... a partir de una lista de varias opciones. En la consulta, se escribe como [ORDER].

public db::order ( int &$order, array $orders, int $default = 0 ): void
order

El índice de la declaración a utilizar, entre las opciones pasadas en el siguiente parámetro.

Note que este valor se pasa por referencia.

En caso de no hallar una declaración, el método sobrescribirá la variable con el valor por defecto, de esta manera, no tendrá que preocuparse de la lógica del caso.

orders

La lista completa de las posibles declaraciones a utilizar.

default

Valor por defecto para el caso de que no exista el índice pasado en el primer parámetro.

 

Database::sort

Completa la declaración ORDER BY .... con las declaraciones ASC y DESC. En la consulta, se escribe como [SORT].

Si en la consulta no se halla el marcador [SORT], la declaración se escribirá al final de la declaración ingresada en el método db::order

public db::sort ( string &$sort, string $default = 'asc' ): void
sort

Una cadena con cualquiera de las dos opciones asc o desc.

Note que este valor se pasa por referencia.

En caso de pasar un valor distinto a los permitidos, el método sobrescribirá la variable con el valor por defecto, de esta manera, no tendrá que preocuparse de la lógica del caso.

default

Valor por defecto.