Foros del Web » Programando para Internet » PHP »

Problema actualizar class MySQL a MySQLi

Estas en el tema de Problema actualizar class MySQL a MySQLi en el foro de PHP en Foros del Web. Hola a todos... tengo una clase php, muy antigua, que me maneja el acceso de usuraios, y no me queda otra que actualizarla a MySQLi ...
  #1 (permalink)  
Antiguo 08/07/2020, 12:05
 
Fecha de Ingreso: octubre-2004
Mensajes: 768
Antigüedad: 16 años
Puntos: 3
Problema actualizar class MySQL a MySQLi

Hola a todos... tengo una clase php, muy antigua, que me maneja el acceso de usuraios, y no me queda otra que actualizarla a MySQLi con mis escasos conocimientos de php, ya que mi Sitio depende de ella. Por favor, necesito ayuda u orientación para tratar de resolverlo.

En el archivo mi_classe.php tengo lo siguiente (pongo la parte del código donde se está frenando):

Código PHP:
<?php
require_once("db_config.php"); // this path works for me...

    
function Access_user($redirect true) {
        
$this->connect_db();
        if (empty(
$_SESSION['logged_in'])) {
            
$this->login_reader();
            if (
$this->is_cookie) {
                
$this->set_user($redirect);
            }
        }         
        if (isset(
$_SESSION['user'], $_SESSION['pw'])) {
            
$this->user $_SESSION['user'];
            
$this->user_pw $_SESSION['pw'];
        }
    }

    function 
check_user($pass "") {
        global 
$mylink;
        switch (
$pass) {
            case 
"new"
            
$sql sprintf("SELECT COUNT(*) AS test FROM %s WHERE email = %s OR login = %s"$this->table_name$this->ins_string($this->user_email), $this->ins_string($this->user));
            break;
            case 
"lost":
            
$sql sprintf("SELECT COUNT(*) AS test FROM %s WHERE email = %s AND active = 'y'"$this->table_name$this->ins_string($this->user_email));
            break;
            default:
            
$sql sprintf("SELECT COUNT(*) AS test FROM %s WHERE BINARY login = %s AND pw = %s AND active = 'y'"$this->table_name$this->ins_string($this->user), $this->ins_string($this->user_pw));
        }
        
//La siguienta parte la he modificado para adaptarla a MySQLi
        
$result $mylink->query($sql);
        
$row $result->fetch_assoc();
        if (
$row['test'] == 1) {
            return 
true;
        } else {
            return 
false;
        }
    }
    
//Función de conexión a la BD modificada para adaptarla a MySQLi
    
function connect_db() {
        
$mylink = new mysqli(DB_SERVERDB_USERDB_PASSWORD);
        
$mylink->select_db(DB_NAME);
        
$mylink->set_charset('utf8');        
    }
?>
Ahora bien, el proceso se frena y me tira este error: " Fatal error: Call to a member function query() on null in..." haciendo referencia a la linea:

Código PHP:
<?php

$result 
$mylink->query($sql);

?>
Interpreto que la consulta del query es nula porque no está recibiendo la conexión a la BD, y no me doy cuenta dónde está la falla.

Muchas gracias de antemano!
  #2 (permalink)  
Antiguo 08/07/2020, 16:54
 
Fecha de Ingreso: abril-2006
Mensajes: 475
Antigüedad: 14 años, 6 meses
Puntos: 107
Respuesta: Problema actualizar class MySQL a MySQLi

tu error esta en que estas solicitando una variable global

Código PHP:
Ver original
  1. function check_user($pass = "") {
  2.         global $mylink;

y en tu funcion de conexion estas llenando una variable LOCAL solo para la funcion

Código PHP:
Ver original
  1. function connect_db() {
  2.         $mylink = new mysqli(DB_SERVER, DB_USER, DB_PASSWORD);
  3.         $mylink->select_db(DB_NAME);
  4.         $mylink->set_charset('utf8');        
  5.     }

supongo corrigiendo y que se ponga en global ya tendrias los mensajes correspondientes

Código PHP:
Ver original
  1. function connect_db() {
  2. global $mylink;
  3.         $mylink = new mysqli(DB_SERVER, DB_USER, DB_PASSWORD);
  4.         $mylink->select_db(DB_NAME);
  5.         $mylink->set_charset('utf8');        
  6.     }
__________________
Mis aportes te ayudaron??, te hicieron ahorrar valiosos tiempo??, si quieres puedes agradecerme con un Gracias o con una donacion
https://paypal.com/pools/c/8lmNLmWnG9
  #3 (permalink)  
Antiguo 08/07/2020, 16:56
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.097
Antigüedad: 12 años, 2 meses
Puntos: 2231
Respuesta: Problema actualizar class MySQL a MySQLi

Parece que no te estás conectando correctamente a la base de datos, proporciona directamente el nombre de la base que vas a utilizar:

Código PHP:
Ver original
  1. //Función de conexión a la BD modificada para adaptarla a MySQLi
  2.     function connect_db() {
  3.         $mylink = new mysqli(DB_SERVER, DB_USER, DB_PASSWORD, DB_NAME);
  4.         $mylink->set_charset('utf8');        
  5.     }

Adicionalmente, para evitar el uso de "global $mylink", deberías declararla como propiedad de la clase "private $mylink" y acceder con "$this->mylink" donde la necesites.
__________________
- León, Guanajuato
- GV-Foto
  #4 (permalink)  
Antiguo 08/07/2020, 17:29
 
Fecha de Ingreso: octubre-2004
Mensajes: 768
Antigüedad: 16 años
Puntos: 3
Respuesta: Problema actualizar class MySQL a MySQLi

Hola "tuadmin"... parece que poniendo en global como dices, el script sigue corriendo... ¿sería ese el problema?

Hola "Triby"... poniendo directamente el nombre de la base me sigue dando el mismo error.
  #5 (permalink)  
Antiguo 08/07/2020, 18:22
 
Fecha de Ingreso: abril-2006
Mensajes: 475
Antigüedad: 14 años, 6 meses
Puntos: 107
Respuesta: Problema actualizar class MySQL a MySQLi

Cita:
Iniciado por paulkees Ver Mensaje
Hola "tuadmin"... parece que poniendo en global como dices, el script sigue corriendo... ¿sería ese el problema?

Hola "Triby"... poniendo directamente el nombre de la base me sigue dando el mismo error.
eso era parte del problema, ya lo otro depende de ti en buscar los otros erroers
__________________
Mis aportes te ayudaron??, te hicieron ahorrar valiosos tiempo??, si quieres puedes agradecerme con un Gracias o con una donacion
https://paypal.com/pools/c/8lmNLmWnG9
  #6 (permalink)  
Antiguo 08/07/2020, 18:46
 
Fecha de Ingreso: octubre-2004
Mensajes: 768
Antigüedad: 16 años
Puntos: 3
Respuesta: Problema actualizar class MySQL a MySQLi

Si si, claro... estoy trabajando en ello, por ahora el script está corriendo y voy actualizando, espero que pueda lograrlo.

Muchas gracias "tuadmin" por la ayuda!!!



La zona horaria es GMT -6. Ahora son las 12:37.