Gestiona la conexión a la base de datos y sus consultas. Actualmente, el framework utiliza sólo base de datos MySql y MariaDB.
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().
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
Escapa un valor que será incluido en una consulta.
public Database::quote ( mixed $value ): string
El valor a escapar. Se desaconseja su uso en favor de las consultas preparadas.
Devuelve el identificador de la última consulta de inserción.
public Database::lastInsertId ( ): int
Ejecuta una consulta a la base de datos.
public Database::exec ( string|StatementInterface $stmt, mixed ... $params ): int
Puede ser una cadena con la consulta o un objeto que implememente StatementInterface.
Valores de relleno para las consultas preparadas.
Ejecuta un conjunto de consultas preparadas.
public Database::execAll ( string|StatementInterface $stmt, mixed ...$params ): void
Puede ser una cadena con la consulta o un objeto que implememente StatementInterface.
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.
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
Puede ser una cadena con la consulta o un objeto que implememente StatementInterface.
Valores de relleno para las consultas preparadas.
Retorna una fila de resultados.
public Database::fetch ( $style = Database::FETCH_ASSOC ): array
Una de las constantes de tipo de resultados.
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
El número de índice de la columna a retornar.
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
Controla el contenido del array devuelto, tal como en db::fetch().
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].
Un array que se utilizará como base.
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.
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.
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 INSERT, UPDATE y INSERT .. ON DUPLICATE KEY.
Por ejemplo, si tenemos un conjunto:
Podemos hacer las siguientes consultas:
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:
% al final, por lo que filtrará todos los valores que comienzan con dicho caracter.%, por lo que filtrará los valores que contengan dicho texto.
En el siguiente ejemplo, devolverá los usuarios cuyo username comience con la letra m.
Las declaraciones flexibles permiten al framework interactuar con la declaración sql. Para escribir una declaración flexible, se utilizarán corchetes.
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]");
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.
La declaración.
Todos los parámetros que requiere la declaración.
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);
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.
La declaración.
Todos los parámetros que requiere la declaración.
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.
El parámetro a ingresar.
Crea la declaración ORDER BY .... a partir de una lista de varias opciones. En la consulta, se escribe como [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.
La lista completa de las posibles declaraciones a utilizar.
Valor por defecto para el caso de que no exista el índice pasado en el primer parámetro.
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.
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.
Valor por defecto.