jysperu/easydb-mysqli

Gestión sencilla de MySql

v1.2.6 2023-12-14 18:12 UTC

This package is auto-updated.

Last update: 2024-05-14 19:03:30 UTC


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

*/