public function prepararValor($valor, $tipo = 'txt', $permiteVacio = false)
    {
        if (is_array($valor)) {
            if (empty($valor)) {
                return 'NULL';
            }

            foreach ($valor as $llave => $v) {
                $valor[$llave] = $this->prepararValor($v, $tipo);
            }

            return $valor;
        }

        // Retornamos valor boleano según el tipo
        if ($tipo == 'bol' || $tipo == 'bool') {
            return ($valor) ? '1' : '0';
        }

        // Detectamos y retornamos valor nulo
        if ($valor === null || $valor === false) {
            return 'NULL';
        }
        if (!$permiteVacio && $valor === '') {
            return 'NULL';
        }

        // Retornamos valor numerico según el tipo
        if ($tipo == 'num' || $tipo == 'int') {
            if ($valor === '') return 'NULL';

            return strval(floatval($valor));
        }

        // Retornamos valor textual como valor predeterminado
        return $this->pdo->quote($valor);
    }