Foros del Web » Programando para Internet » PHP »

Clase para conecta a BD mysqli

Estas en el tema de Clase para conecta a BD mysqli en el foro de PHP en Foros del Web. Hola, Resulta que estoy utilizando esta clase para la conexión con la BD y realizar consultas https://gist.github.com/Klerith/5fdb98e266ff3449f2ed Código PHP: <? // ====================================================== // Clase: class.Database.php // Funcion: Se encarga del manejo con la base de datos // Descripcion: Tiene varias funciones muy útiles para //                 el manejo de registros. ...
  #1 (permalink)  
Antiguo 28/03/2017, 13:03
Avatar de sebandrescc2  
Fecha de Ingreso: diciembre-2012
Mensajes: 45
Antigüedad: 11 años, 4 meses
Puntos: 0
Pregunta Clase para conecta a BD mysqli

Hola,

Resulta que estoy utilizando esta clase para la conexión con la BD y realizar consultas
https://gist.github.com/Klerith/5fdb98e266ff3449f2ed

Código PHP:
<?
// ======================================================
// Clase: class.Database.php
// Funcion: Se encarga del manejo con la base de datos
// Descripcion: Tiene varias funciones muy útiles para
//                 el manejo de registros.
//                 
// Ultima Modificación: 17 de marzo de 2015
// ======================================================
    
class Database{
    private 
$_connection;
    private 
$_host "localhost";
    private 
$_user "caphum_user";
    private 
$_pass "AHAcL3SLuEawwVaW";
    private 
$_db   "capitalhumano_db";
    
// Almacenar una unica instancia
    
private static $_instancia;
    
// ================================================
    // Metodo para obtener instancia de base de datos
    // ================================================
    
public static function getInstancia(){
        if(!isset(
self::$_instancia)){
            
self::$_instancia = new self;
        }
        return 
self::$_instancia;
    }
    
// ================================================
    // Constructor de la clase Base de datos
    // ================================================
    
public function __construct(){
        
$this->_connection = new mysqli($this->_host,$this->_user,$this->_pass,$this->_db);
        
// Manejar error en base de datos
        
if (mysqli_connect_error()) {
            
trigger_error('Falla en la conexion de base de datos'mysqli_connect_error(), E_USER_ERROR );
        }
    }
    
// Metodo vacio __close para evitar duplicacion
    
private function __close(){}
    
// Metodo para obtener la conexion a la base de datos
    
public function getConnection(){
        return 
$this->_connection;
    }
    
// Metodo que revisa el String SQL
    
private function es_string($sql){
        if (!
is_string($sql)) {
            
trigger_error('class.Database.inc: $SQL enviado no es un string: ' .$sql);
            return 
false;
        }
        return 
true;
    }
    
// ==================================================
    //     Funcion que ejecuta el SQL y retorna un ROW
    //         Esta funcion esta pensada para SQLs, 
    //         que retornen unicamente UNA sola línea
    // ==================================================
    
public function get_Row($sql){
        
        if(!
self::es_string($sql))
            exit();
        
$db DataBase::getInstancia();
        
$mysqli $db->getConnection();
        
$resultado $mysqli->query($sql);
        if(
$row $resultado->fetch_assoc()){
            return 
$row;
        }else{
            return array();
        }
    }
    
// ==================================================
    //     Funcion que ejecuta el SQL y retorna un CURSOR
    //         Esta funcion esta pensada para SQLs, 
    //         que retornen multiples lineas (1 o varias)
    // ==================================================
    
public function get_Cursor($sql){
        if(!
self::es_string($sql))
            exit();
        
$db DataBase::getInstancia();
        
$mysqli $db->getConnection();
        
$resultado $mysqli->query($sql);
        return 
$resultado// Este resultado se puede usar así:  while ($row = $resultado->fetch_assoc()){...}
    
}
    
// ==================================================
    //     Funcion que ejecuta el SQL y retorna un jSon
    //     data: [{...}] con N cantidad de registros
    // ==================================================
    
public function get_json_rows($sql){
        if(!
self::es_string($sql))
            exit();
        
$db DataBase::getInstancia();
        
$mysqli $db->getConnection();
        
$resultado $mysqli->query($sql);
        
// Si hay un error en el SQL, este es el error de MySQL
        
if (!$resultado ) {
            return 
"class.Database.class: error "$mysqli->error;
        }
        
        
$i 0;
        while(
$row $resultado->fetch_assoc()){
            
$registros[$i]= $row;
            
$i++;
        };
        return 
json_encode( array('data' => $registros ) );
    }
    
// ==================================================
    //     Funcion que ejecuta el SQL y retorna un jSon
    //     de una sola linea. Ideal para imprimir un
    //     Query que solo retorne una linea
    // ==================================================
    
public function get_json_row($sql){
        if(!
self::es_string($sql))
            exit();
        
$db DataBase::getInstancia();
        
$mysqli $db->getConnection();
        
$resultado $mysqli->query($sql);
        
// Si hay un error en el SQL, este es el error de MySQL
        
if (!$resultado ) {
            return 
"class.Database.class: error "$mysqli->error;
        }
        if(!
$row $resultado->fetch_assoc()){
            return 
"{}";
        }
        return 
json_encode$row );
    }
    
// ====================================================================
    //     Funcion que ejecuta el SQL y retorna un valor
    //     Ideal para count(*), Sum, cosas que retornen una fila y una columna
    // ====================================================================
    
public function get_valor_query($sql,$columna){
        if(!
self::es_string($sql,$columna))
            exit();
        
$db DataBase::getInstancia();
        
$mysqli $db->getConnection();
        
$resultado $mysqli->query($sql);
        
// Si hay un error en el SQL, este es el error de MySQL
        
if (!$resultado ) {
            return 
"class.Database.class: error "$mysqli->error;
        }
        
$Valor NULL;
        
//Trae el primer valor del arreglo
        
if ($row $resultado->fetch_assoc()) {
            
// $Valor = array_values($row)[0];
            
$Valor $row[$columna];
        }
        return 
$Valor;
    }
    
// ====================================================================
    //     Funcion que ejecuta el SQL de inserción, actualización y eliminación
    // ====================================================================
    
public function ejecutar_idu($sql){
        if(!
self::es_string($sql))
            exit();
        
$db DataBase::getInstancia();
        
$mysqli $db->getConnection();
        if (!
$resultado $mysqli->query($sql) ) {
            return 
"class.Database.class: error "$mysqli->error;
        }else{
            return 
$resultado;
        }
        
        return 
$resultado;
    }
    
// ====================================================================
    //     Funciones para encryptar y desencryptar data: 
    //         crypt_blowfish_bydinvaders
    // ====================================================================
    
function crypt($aEncryptar$digito 7) {
        
$set_salt './1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';
        
$salt sprintf('$2a$%02d$'$digito);
        for(
$i 0$i 22$i++)
        {
            
$salt .= $set_salt[mt_rand(022)];
        }
        return 
crypt($aEncryptar$salt);
    }
    function 
uncrypt($Evaluar$Contra){
        if( 
crypt($Evaluar$Contra) == $Contra)
            return 
true;
        else
            return 
false;
        
    }
}
?>
El problema radica en que el servidor tiene deshabilitado el módulo de mysqli y no hay opcioón alguna para habilitarlo.

La pregunta es, como puedo usar las funciones de mysql nativas en esta clase, para no modificar el código. Hice algunos intentos pero no tengo los conocimientos suficientes como para realizarlo. Cualquier orientación es bienvenida. Gracias
__________________
Aquí voy a escribir mi firma
  #2 (permalink)  
Antiguo 28/03/2017, 13:23
Avatar de petit89  
Fecha de Ingreso: marzo-2011
Mensajes: 1.135
Antigüedad: 13 años, 1 mes
Puntos: 170
Respuesta: Clase para conecta a BD mysqli

en estos tiempos es muy dificil que un servidor no cuente con este modulo, si no encuentras la forma de habilitarlo via cPanel o php.ini... ponte en contacto con tu proveedor, no debera costarle nada habilitarlo o guitarte donde puedas tener la opción...

Si desactualizas la clase hacia mysql puedes tener problemas de que el mismo ya no este funcional en el servidor o en la siguiente actualizacion muera
__________________
█ WebHosting / Reseller a bajo costo | Uptime Garantizado | Soporte en Español e Ingles
¿Te sirvió la respuesta? Deja un +1 (Triangulo negro al lado derecho)
  #3 (permalink)  
Antiguo 28/03/2017, 13:34
Avatar de sebandrescc2  
Fecha de Ingreso: diciembre-2012
Mensajes: 45
Antigüedad: 11 años, 4 meses
Puntos: 0
Respuesta: Clase para conecta a BD mysqli

Cita:
Iniciado por petit89 Ver Mensaje
en estos tiempos es muy dificil que un servidor no cuente con este modulo, si no encuentras la forma de habilitarlo via cPanel o php.ini... ponte en contacto con tu proveedor, no debera costarle nada habilitarlo o guitarte donde puedas tener la opción...

Si desactualizas la clase hacia mysql puedes tener problemas de que el mismo ya no este funcional en el servidor o en la siguiente actualizacion muera
Hola Petit, pues la respuesta del proveedor fue que no hay forma, porque sus otros clientes usan mysql y al cambiar, afectaría a los demas y generaría una carga adicional al server.

Si fuese por mi, me cambio de servior, pero es de un cliente que lo usa hace años.
__________________
Aquí voy a escribir mi firma
  #4 (permalink)  
Antiguo 28/03/2017, 14:44
Avatar de petit89  
Fecha de Ingreso: marzo-2011
Mensajes: 1.135
Antigüedad: 13 años, 1 mes
Puntos: 170
Respuesta: Clase para conecta a BD mysqli

Bueno, pues si no hay de otra... tendras que trabajar con el viejo MySQL, no es necesario intervenir esa clase, puedes buscar otra en el extenso internet.. te dejo una aqui que encontre:

http://geekalt42.net/clase-conexion-mysql-php-6287
__________________
█ WebHosting / Reseller a bajo costo | Uptime Garantizado | Soporte en Español e Ingles
¿Te sirvió la respuesta? Deja un +1 (Triangulo negro al lado derecho)
  #5 (permalink)  
Antiguo 28/03/2017, 16:50
 
Fecha de Ingreso: julio-2014
Mensajes: 334
Antigüedad: 9 años, 9 meses
Puntos: 30
Respuesta: Clase para conecta a BD mysqli

No te hagas una montaña de un grano de arena y mucho menos utilizes MYSQL (sin intención de menospreciar al compañero, pues MYSQL es obsoleta y no tiene proteccion contra SQL injection.). Estoy convencido que tu servidor tiene la libreria PDO instalada así que tendras que cambiar tu clase casi entera para poder utilizar PDO o puedes usar mi clase que cree hace unos meses para manejar PDO.

Aqui mi post donde la publiqué con instrucciones en español
http://www.forosdelweb.com/f18/aport...e-pdo-1157377/

Y aquí el repositorio actualizado y un poco mas completo que el que hay en el post, pero al ser un link de github pues las instrucciones estan en ingles pero los ejemplos son claros tambien.

https://github.com/cdiazr/PDOManager

La driver PDO es es una lobreria que puede manejar distintos tipos de base de datos, solo has de indicar el tipo de driver para que la conexión sea exitosa y en tu caso, el driver que utilizaras es "mysql" ( que no mysqli).

Si tienes dudas de como utilizarla, solo preguntame.
  #6 (permalink)  
Antiguo 29/03/2017, 07:27
 
Fecha de Ingreso: octubre-2010
Ubicación: España
Mensajes: 1.007
Antigüedad: 13 años, 6 meses
Puntos: 123
Respuesta: Clase para conecta a BD mysqli

Cita:
Hola Petit, pues la respuesta del proveedor fue que no hay forma, porque sus otros clientes usan mysql y al cambiar, afectaría a los demas y generaría una carga adicional al server.
Si esto es verdad y no pueden hacer absolutamente nada por solucionarlo yo creo que la mejor opción es huir de ese proveedor.
__________________
Unset($vida['malRollo']);

Etiquetas: bd, clase, conecta, mysql, mysqli, registro, sql
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 04:32.