Helper Mysql.
Funciones de comprobación de datos para MySQL

Code Helper

Helpers – Mysql – Comprobación datos MySQL

Cuando guardamos datos en una base de datos en MySQL hay que tener en cuenta que el valor este en un en mismo rango que el tipo de datos de la base de datos.

También tenemos que asegurar que la longitud de los textos a guardar no superen el máximo que pueda tener el campo de texto de la base de datos.

Se comprueva además que si el campo es una clave primaria o foránea, esta no sea cero y si el campo es obligatorio que tenga un valor.

/**
 * HelperMysql.php
 * @author      Code Develium
 */

namespace Helpers;

/**
 * Class HelperMysql
 */
abstract class HelpMysql
{
    /**
     * Indica si es un número de mysql tiny int unsigned (0,255)
     *
     * @param      $num
     * @param bool $obligatorio
     * @param bool $esId
     * @param null $errorMsg
     *
     * @return bool
     */
    public static function isTinyIntUnsigned( $num, 
                                              $obligatorio, 
                                              $esId, 
                                              &$errorMsg)
    {
        $empty = HelpValidate::isEmpty($num);

        if ($esId && ($empty || $num === 0 || $num == '0')) {
            /* Si es ID, no puede estar vacío */
            $errorMsg = 'El ID no puede ser 0';
            return false;
        }

        if ($empty && $obligatorio) {
            $errorMsg = 'Campo obligatorio';
            return false;
        }
        if ($empty && !$obligatorio) {
            // Puede ser nulo
            return true;
        }

        $rangoOk = ($num >= 0 && $num <= 255);
        if (!$rangoOk) {
            $errorMsg = 'Tiny int fuera de rango';
        }
        return $rangoOk;
    }

    /**
     * Indica si es un número de mysql tiny int (-128,127)
     *
     * @param int  $num
     * @param bool $obligatorio
     * @param      $esId
     * @param      $errorMsg
     *
     * @return bool
     */
    public static function isTinyInt( $num, 
                                      $obligatorio, 
                                      $esId, 
                                      &$errorMsg)
    {
        $empty = HelpValidate::isEmpty($num);

        if ($esId && ($empty || $num === 0 || $num == '0')) {
            /* Si es ID, no puede estar vacío */
            $errorMsg = 'El ID no puede ser 0';
            return false;
        }

        if ($empty && $obligatorio) {
            $errorMsg = 'Campo obligatorio';
            return false;
        }
        if ($empty && !$obligatorio) {
            // Puede ser nulo
            return true;
        }

        $rangoOk = ($num >= -128 && $num <= 127);
        if (!$rangoOk) {
            $errorMsg = 'Tiny int fuera de rango';
        }
        return $rangoOk;
    }

    /**
     * Indica si es un número de mysql small int unsigned (0,65535)
     *
     * @param      $num
     * @param bool $obligatorio
     * @param      $esId
     * @param      $errorMsg
     *
     * @return bool
     */
    public static function isSmallIntUnsigned( $num, 
                                               $obligatorio, 
                                               $esId, 
                                               &$errorMsg)
    {
        $empty = HelpValidate::isEmpty($num);

        if ($esId && ($empty || $num === 0 || $num == '0')) {
            /* Si es ID, no puede estar vacío */
            $errorMsg = 'El ID no puede ser 0';
            return false;
        }

        if ($empty && $obligatorio) {
            $errorMsg = 'Campo obligatorio';
            return false;
        }
        if ($empty && !$obligatorio) {
            // Puede ser nulo
            return true;
        }

        $rangoOk = ($num >= 0 && $num <= 65535);
        if (!$rangoOk) {
            $errorMsg = 'Small int fuera de rango';
        }
        return $rangoOk;
    }

    /**
     * Indica si es un número de mysql small int (-32768,32767)
     *
     * @param      $num
     * @param bool $obligatorio
     * @param      $esId
     * @param      $errorMsg
     *
     * @return bool
     */
    public static function isSmallInt( $num, 
                                       $obligatorio, 
                                       $esId, 
                                       &$errorMsg)
    {
        $empty = HelpValidate::isEmpty($num);

        if ($esId && ($empty || $num === 0 || $num == '0')) {
            /* Si es ID, no puede estar vacío */
            $errorMsg = 'El ID no puede ser 0';
            return false;
        }

        if ($empty && $obligatorio) {
            $errorMsg = 'Campo obligatorio';
            return false;
        }
        if ($empty && !$obligatorio) {
            // Puede ser nulo
            return true;
        }

        $rangoOk = ($num >= -32768 && $num <= 32767);
        if (!$rangoOk) {
            $errorMsg = 'Small int fuera de rango';
        }
        return $rangoOk;
    }

    /**
     * Indica si es un número de mysql medium int 
     * unsigned (0,16777215)
     *
     * @param      $num
     * @param bool $obligatorio
     * @param      $esId
     * @param      $errorMsg
     *
     * @return bool
     */
    public static function isMediumIntUnsigned( $num, 
                                                $obligatorio, 
                                                $esId, 
                                                &$errorMsg)
    {
        $empty = HelpValidate::isEmpty($num);

        if ($esId && ($empty || $num === 0 || $num == '0')) {
            /* Si es ID, no puede estar vacío */
            $errorMsg = 'El ID no puede ser 0';
            return false;
        }

        if ($empty && $obligatorio) {
            $errorMsg = 'Campo obligatorio';
            return false;
        }
        if ($empty && !$obligatorio) {
            // Puede ser nulo
            return true;
        }

        $rangoOk = ($num >= 0 && $num <= 16777215);
        if (!$rangoOk) {
            $errorMsg = 'Medium int fuera de rango';
        }
        return $rangoOk;
    }

    /**
     * Indica si es un número de mysql medium int (-8388608,8388607)
     *
     * @param      $num
     * @param bool $obligatorio
     * @param      $esId
     * @param      $errorMsg
     *
     * @return bool
     */
    public static function isMediumInt( $num, 
                                        $obligatorio, 
                                        $esId, 
                                        &$errorMsg)
    {
        $empty = HelpValidate::isEmpty($num);

        if ($esId && ($empty || $num === 0 || $num == '0')) {
            /* Si es ID, no puede estar vacío */
            $errorMsg = 'El ID no puede ser 0';
            return false;
        }

        if ($empty && $obligatorio) {
            $errorMsg = 'Campo obligatorio';
            return false;
        }
        if ($empty && !$obligatorio) {
            // Puede ser nulo
            return true;
        }

        $rangoOk = ($num >= -8388608 && $num <= 8388607);
        if (!$rangoOk) {
            $errorMsg = 'Medium int fuera de rango';
        }
        return $rangoOk;
    }

    /**
     * Indica si es un número de mysql int unsigned (0,4294967295)
     *
     * @param      $num
     * @param bool $obligatorio
     * @param bool $esId
     * @param null $errorMsg
     *
     * @return bool
     */
    public static function isIntUnsigned( $num, 
                                          $obligatorio, 
                                          $esId, 
                                          &$errorMsg )
    {
        $empty = HelpValidate::isEmpty($num);

        if ($esId && ($empty || $num === 0 || $num == '0')) {
            /* Si es ID, no puede estar vacío */
            $errorMsg = 'El ID no puede ser 0';
            return false;
        }

        if ($empty && $obligatorio) {
            $errorMsg = 'Campo obligatorio';
            return false;
        }
        if ($empty && !$obligatorio) {
            // Puede ser nulo
            return true;
        }

        $rangoOk = ($num >= 0 && $num <= 4294967295);
        if (!$rangoOk) {
            $errorMsg = 'Int fuera de rango';
        }
        return $rangoOk;
    }

    /**
     * Indica si es un número de mysql int (-2147483648 0,2147483647)
     *
     * @param      $num
     * @param bool $obligatorio
     * @param bool $esId
     * @param null $errorMsg
     *
     * @return bool
     */
    public static function isInt( $num, 
                                  $obligatorio, 
                                  $esId, 
                                  &$errorMsg)
    {
        $empty = HelpValidate::isEmpty($num);

        if ($esId && ($empty || $num === 0 || $num == '0')) {
            /* Si es ID, no puede estar vacío */
            $errorMsg = 'El ID no puede ser 0';
            return false;
        }

        if ($empty && $obligatorio) {
            $errorMsg = 'Campo obligatorio';
            return false;
        }
        if ($empty && !$obligatorio) {
            // Puede ser nulo
            return true;
        }

        $rangoOk = ($num >= -2147483648 && $num <= 2147483647);
        if (!$rangoOk) {
            $errorMsg = 'Int fuera de rango';
        }
        return $rangoOk;
    }

    /**
     * Indica si es un número de mysql big int unsigned (0,18446744073709551615)
     *
     * @param      $num
     * @param bool $obligatorio
     * @param bool $esId
     * @param      $errorMsg
     *
     * @return bool
     */
    public static function isBigIntUnsigned( $num, 
                                             $obligatorio, 
                                             $esId, 
                                             &$errorMsg)
    {
        $empty = HelpValidate::isEmpty($num);

        if ($esId && ($empty || $num === 0 || $num == '0')) {
            /* Si es ID, no puede estar vacío */
            $errorMsg = 'El ID no puede ser 0';
            return false;
        }

        if ($empty && $obligatorio) {
            $errorMsg = 'Campo obligatorio';
            return false;
        }
        if ($empty && !$obligatorio) {
            // Puede ser nulo
            return true;
        }

        $rangoOk = ($num >= 0 && $num <= 18446744073709551615);
        if (!$rangoOk) {
            $errorMsg = 'Big Int fuera de rango';
        }
        return $rangoOk;
    }

    /**
     * Indica si es un número de mysql big int unsigned 
     * (-9223372036854775808,9223372036854775807)
     *
     * @param      $num
     * @param bool $obligatorio
     * @param      $esId
     * @param      $errorMsg
     *
     * @return bool
     */
    public static function isBigInt( $num, 
                                     $obligatorio, 
                                     $esId, 
                                     &$errorMsg)
    {
        $empty = HelpValidate::isEmpty($num);

        if ($esId && ($empty || $num === 0 || $num == '0')) {
            /* Si es ID, no puede estar vacío */
            $errorMsg = 'El ID no puede ser 0';
            return false;
        }

        if ($empty && $obligatorio) {
            $errorMsg = 'Campo obligatorio';
            return false;
        }
        if ($empty && !$obligatorio) {
            // Puede ser nulo
            return true;
        }

        $rangoOk = ($num >= -9223372036854775808 && 
                    $num <= 9223372036854775807);
  
        if (!$rangoOk) {
            $errorMsg = 'Big Int fuera de rango';
        }
        return $rangoOk;
    }

    /**
     * Indica si un string es válido para ser guardado en una campo 
     * string de una base de datos Mysql.
     * La longitud del campo no puede superar un número máximo de 
     * carcateres.
     * Si el campo es obligatorio, ha de existir un valor no vacío.
     *
     * @param string $valor
     * @param int    $len
     * @param bool   $obligatorio
     * @param null   $errorMsg
     *
     * @return bool
     */
    public static function isString( $valor, 
                                     $len, 
                                     $obligatorio, 
                                     &$errorMsg)
    {
        $empty = HelpValidate::isEmpty($valor);

        if ( $empty && $obligatorio) {
            $errorMsg = 'Campo obligatorio';
            return false;
        }

        // Valor no obligatorio
        if ( $empty && !$obligatorio) {
            return true;
        }

        $valido = (strlen(''.$valor) <= $len);

        if (!$valido) {
            $errorMsg = "Máximo {$len} caracteres";
        }
        return $valido;
    }


    /**
     * Indica si un double es válido para ser guardado en una campo
     * double de una base de datos Mysql.
     * Si el campo es obligatorio, ha de existir un valor no vacío, 
     * pero SI puede ser cero.
     *
     * @param double|int $valor
     * @param bool       $obligatorio
     * @param            $errorMsg
     *
     * @return bool
     */
    public static function isDouble( $valor, $obligatorio, &$errorMsg)
    {
        if (!filter_var($valor, FILTER_VALIDATE_FLOAT)) {
            $errorMsg = 'Valor double incorrecto';
            return false;
        }

        $empty = HelpValidate::isEmpty($valor);

        if ( $empty && $obligatorio) {
            $errorMsg = 'Campo obligatorio';
            return false;
        }

        // Valor no obligatorio
        if ( $empty && !$obligatorio) {
            return true;
        }
        return true;
    }

    /**
     * Indica si un string en formato fecha y hora es válido para ser 
     * guardado en una campo datetime
     * de una base de datos Mysql.
     * Si el campo es obligatorio, ha de existir un valor no vacío.
     * Formato de fecha: yyyy-mm-dd hh:mm:ss
     *
     * @param string $valor
     * @param bool   $obligatorio
     * @param null   $errorMsg
     *
     * @return bool
     */
    public static function isDateTime( $valor, 
                                       $obligatorio, 
                                       &$errorMsg)
    {
        $empty = HelpValidate::isEmpty($valor);

        if ( $empty && $obligatorio) {
            $errorMsg = 'Campo obligatorio';
            return false;
        }

        // Valor no obligatorio
        if ( $empty && !$obligatorio) {
            return true;
        }

        $dateOk = HelpValidate::isDateTime($valor);

        if( !$dateOk){
            $errorMsg = 'Formato de fecha y hora incorrecto: '.$valor;
        }
        return $dateOk;
    }

    /**
     * Indica si un string en formato fecha es válido para ser 
     * guardado en una campo date de una base de datos Mysql.
     * Si el campo es obligatorio, ha de existir un valor no vacío.
     * Formato de fecha: yyyy-mm-dd
     *
     * @param string $valor
     * @param bool   $obligatorio
     * @param        $errorMsg
     *
     * @return bool
     */
    public static function isDate($valor, $obligatorio, &$errorMsg)
    {
        $empty = HelpValidate::isEmpty($valor);

        if ( $empty && $obligatorio) {
            $errorMsg = 'Campo obligatorio';
            return false;
        }

        // Valor no obligatorio
        if ( $empty && !$obligatorio) {
            return true;
        }

        $dateOk = HelpValidate::isDate($valor);

        if( !$dateOk){
            $errorMsg = 'Formato de fecha incorrecto: '.$valor;
        }
        return $dateOk;

    }

    /**
     * Devuelve true si es un valor bool. Puede ser obligatorio.
     *
     * @param      $valor
     * @param      $obligatorio
     * @param null $errorMsg
     *
     * @return bool
     */
    public static function isBool( $valor, 
                                   $obligatorio, 
                                   &$errorMsg = null): bool
    {
        $empty = HelpValidate::isEmpty($valor);

        if ( $empty && $obligatorio) {
            $errorMsg = 'Campo obligatorio';
            return false;
        }

        // Valor no obligatorio
        if ( $empty && !$obligatorio) {
            return true;
        }

        if (!is_bool($valor)) {
            $errorMsg = 'Valor bool fuera de rango: '.$valor;
            return false;
        }
        return true;
    }
}