jysperu / easydb-mysqli
Gestión sencilla de MySql
v1.2.7
2024-10-23 02:56 UTC
Requires
- php: ^8.1
- jysperu/helpers-common: ^1.0
README
Instalación via composer
composer require jysperu/easydb-mysqli
Funciones generales
require_once 'vendor/autoload.php';
$con = EasyDB\MySql::conectar('localhost', 'root', 'mysql', 'prueba');
if (!$con)
die('Error al conectar base datos');
$id = $con->insert('cliente', [
'dni' => '12345678',
'nombres' => 'Pedro',
'apellidos' => 'Quispe',
]);
$con->update('cliente', [
'dni' => '87654321',
], [
'id' => $id
]);
$con->delete('cliente', [
'id' => $id
]);
$lista = $con->select('prueba');
foreach ($result as $row) {
## $row es un array con la lista de campos
foreach ($row as $k => $v) {
echo $k, PHP_EOL;
echo $v, PHP_EOL;
echo PHP_EOL;
}
break;
}
Advance Where
use EasyDB\MySql\AdvanceWhere;
/**
* Añadir un IS NULL / IS NOT NULL
* El bloque necesita de un key que será el campo e indicar AdvanceWhere::IS_NULL o AdvanceWhere::IS_NOT_NULL
* El bloque puede ser un array de un único item o ser enviado como valor del key
*
* Opciones:
* - AdvanceWhere::IS_NULL => ... IS NULL
* - AdvanceWhere::IS_NOT_NULL => ... IS NOT NULL
*/
$lista = $con->select('prueba', [
'opcion1' => [ AdvanceWhere::IS_NULL ],
'opcion2' => AdvanceWhere::IS_NOT_NULL
]); // SELECT * FROM `prueba` WHERE TRUE AND `opcion1` IS NULL AND `opcion2` IS NOT NULL
/**
* Añadir un LIKE ...
* El bloque necesita de un key que será el campo y 01 valor después de haber indicado AdvanceWhere::P_LIKE_P
* El valor puede ser alfanumérico
*
* La existencia y posición de la P indica donde irá el caracter %
* Opciones:
* - AdvanceWhere::P_LIKE_P => "%...%"
* - AdvanceWhere::LIKE_P => "...%"
* - AdvanceWhere::P_LIKE => "%..."
* - AdvanceWhere::LIKE => "..."
*/
$lista = $con->select('prueba', [
'codigo' => [
AdvanceWhere::P_LIKE_P,
'123'
],
]); // SELECT * FROM `prueba` WHERE TRUE AND `codigo` LIKE "%123%"
/**
* Añadir un LIKE "str"
*/
$lista = $con->select('prueba', [
'codigo' => [
AdvanceWhere::LIKE,
'123'
],
]); // SELECT * FROM `prueba` WHERE TRUE AND `codigo` LIKE "123"
/**
* Añadir un IN de un campo con un listado de valores
* El bloque necesita de un key que será el campo y por lo menos 01 valor después de haber indicado AdvanceWhere::IN
* Los valores pueden ser alfanuméricos
*/
$lista = $con->select('prueba', [
'estado' => [
AdvanceWhere::IN,
'finalizado',
'cancelado',
'abortado',
'congelado',
],
]); // SELECT * FROM `prueba` WHERE TRUE AND `estado` IN (?,?,?,?)
/**
* Añadir un BETWEEN entre 02 fechas
* El bloque necesita de un key que será el campo y 2 valores después de haber indicado AdvanceWhere::BETWEEN
* La función NOW() está permitida como valor texto para luego añadirse en el query como función
*/
$lista = $con->select('prueba', [
'fecha' => [
AdvanceWhere::BETWEEN,
date('Y-m-d 00:00:00'),
'NOW()',
],
]); // SELECT * FROM `prueba` WHERE TRUE AND `fecha` BETWEEN ? AND NOW()
/**
* Añadir un BETWEEN entre 02 números
* El bloque necesita de un key que será el campo y 2 valores después de haber indicado AdvanceWhere::BETWEEN
*/
$lista = $con->select('prueba', [
'veces' => [ AdvanceWhere::BETWEEN, 1, 5 ],
]); // SELECT * FROM `prueba` WHERE TRUE AND `veces` BETWEEN ? AND ?
/**
* Combinar condicionales en el where
* Los bloques AND / OR no requieren tener un valor key
*/
$lista = $con->select('prueba', [
[
AdvanceWhere::OR ,
'estado' => 'finalizado',
[
AdvanceWhere::AND ,
'estado' => 'abortado',
'fecha' => [
AdvanceWhere::BETWEEN,
date('Y-m-d 00:00:00'),
'NOW()',
]
],
'veces' => AdvanceWhere::IS_NULL,
],
]); // ... WHERE TRUE AND (`estado` = ? OR (`estado` = ? AND `fecha` BETWEEN ? AND NOW()) OR `veces` IS NULL)
/**
* Utilizar los casos de una clase enum
* La función cases() de la clase enum devolverá un array de datos que se convertirán a texto
* Los casos devueltos se pueden añadir a un IN en el query
*/
enum Opciones
{
case A;
case B;
case C;
}
$lista = $con->select('prueba', [
'opcion' => [
AdvanceWhere::IN,
Opciones::cases()
],
]); // ... WHERE TRUE AND `opcion` IN (?,?,?)
Constructor Regular Expression para los nombres en la base datos
/** Símbolo "Acento Grave" */
$ag = '`';
/**
* Similar: \s* (Any múltiple whitespace character)
* Espacio SI permitido
* Tabulación SI permitido
*/
$s = '[\t ]*';
/**
* Base: \S (Any non-whitespace character)
* Espacio SI permitido
* $ag NO permitido
*/
$n_na = '[^\r\n\t\f\v\`]';
/**
* Base: \S (Any non-whitespace character)
* $ag NO permitido
*/
$n_na_ns = '[^\r\n\t\f\v\` ]';
/**
* Base: \S (Any non-whitespace character)
* Espacio SI permitido
* $ag NO permitido
* Punto NO permitido
*/
$n_na_np = '[^\r\n\t\f\v\`\.]';
/**
* Base: \S (Any non-whitespace character)
* $ag NO permitido
* Punto NO permitido
*/
$n_na_np_ns = '[^\r\n\t\f\v\`\. ]';
/**
* Expectativa de nombre encapsulado con $ag en los lados
* Resultado: `[\t ]*(?:[^\r\n\t\f\v\`]*[^\r\n\t\f\v\` ])[\t ]*`
* Ejemplos:
* - `nombre`
* - ` nombre ` => Se convierte a `nombre`
* - ` Nombre con Espacios ` => Se convierte a `Nombre con Espacios`
*/
$m_ag = '`' . $s . '(?:' . $n_na . '*' . $n_na_ns . ')' . $s . '`';
/**
* Expectativa de nombre QUE NO ESTÁ encapsulado con $ag pero acepta espacios internos
* Resultado: (?:[^\r\n\t\f\v\`\.]*[^\r\n\t\f\v\`\. ])
* Uso: Nombres de base datos o de la tabla previos a un punto divisor con el nombre del campo
* Ejemplos:
* - Nombre con Espacios => Se convierte a `Nombre con Espacios`
*/
$m_tx1 = '(?:' . $n_na_np . '*' . $n_na_np_ns . ')';
/**
* Expectativa de nombre QUE NO ESTÁ encapsulado con $ag y NO acepta espacios internos
* Resultado: (?:[^\r\n\t\f\v\`\. ]+)
* Uso: Nombres del campo o tabla, el texto adicional al espacio que tenga se asume que es un alias
* Ejemplos:
* - tabla tbl => Se convierte a `tabla` AS `tbl`
*/
$m_tx2 = '(?:' . $n_na_np_ns . '+)';
/**
* Capturador de grupo del bloque utilizando $m_ag y $m_tx1
* Resultado: \s*(`[\t ]*(?:[^\r\n\t\f\v\`]*[^\r\n\t\f\v\` ])[\t ]*`|(?:[^\r\n\t\f\v\`\.]*[^\r\n\t\f\v\`\. ]))\s*
*/
$word1 = '\s*(' . $m_ag . '|' . $m_tx1 . ')\s*';
/**
* Capturador de grupo del bloque utilizando $m_ag y $m_tx2
* Resultado: \s*(`[\t ]*(?:[^\r\n\t\f\v\`]*[^\r\n\t\f\v\` ])[\t ]*`|(?:[^\r\n\t\f\v\`\. ]+))\s*
*/
$word2 = '\s*(' . $m_ag . '|' . $m_tx2 . ')\s*';
/** Verificador si cuenta con la palabra reservada "AS" indicativo que cuenta con un alias adicional */
$as = '\s*(?:as)?\s*';
/** Expresión regular para obtener los nombres */
$regexp = '/^\s*(?:' . $word1 . '\.\s*)?(?:' . $word1 . '\.\s*)?(?:' . $word2 . ')?\s*(?:' . $as . $word2 . ')?/i';
/* ## Resultado:
/^\s*(?:\s*(`[\t ]*(?:[^\r\n\t\f\v\`]*[^\r\n\t\f\v\` ])[\t ]*`|(?:[^\r\n\t\f\v\`\.]*[^\r\n\t\f\v\`\. ]))\s*\.\s*)?(?:\s*(`[\t ]*(?:[^\r\n\t\f\v\`]*[^\r\n\t\f\v\` ])[\t ]*`|(?:[^\r\n\t\f\v\`\.]*[^\r\n\t\f\v\`\. ]))\s*\.\s*)?(?:\s*(`[\t ]*(?:[^\r\n\t\f\v\`]*[^\r\n\t\f\v\` ])[\t ]*`|(?:[^\r\n\t\f\v\`\. ]+))\s*)?\s*(?:\s*(?:as)?\s*\s*(`[\t ]*(?:[^\r\n\t\f\v\`]*[^\r\n\t\f\v\` ])[\t ]*`|(?:[^\r\n\t\f\v\`\. ]+))\s*)?/i
*/