Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] problemas con identificador de mysqli en clase

Estas en el tema de problemas con identificador de mysqli en clase en el foro de PHP en Foros del Web. Hola a todos. se me ha presentado un problema, el cual, en ralidad no entiendo porque sucede. veran, cree una clase para manejar las consultas ...
  #1 (permalink)  
Antiguo 12/08/2015, 17:44
Avatar de ColdFusion  
Fecha de Ingreso: octubre-2008
Ubicación: Tocoa, Colon Honduras C.A.
Mensajes: 419
Antigüedad: 15 años, 6 meses
Puntos: 9
problemas con identificador de mysqli en clase

Hola a todos.

se me ha presentado un problema, el cual, en ralidad no entiendo porque sucede.
veran, cree una clase para manejar las consultas de mi sitio, inicialmente use las funciones mysql y no las mysqli, hoy decidi modificar mi clase para usar las de mysqli y resulta que no puedo usar el identificador de la conexion de la base en las funciones de la clase. este es un ejemplo de mi clase.

Código PHP:
class bd {
var 
$link// esta es la var. donde quiere almacenar el identificador de la conexion
var $ultima_consulta;

public function 
conectar($base$servidor$usuario$pass) {
$this->link mysqli_connect($servidor$usuario$pass$base) or die('Error: 'mysqli_error($this->con));
}

public function 
consultar($consulta) {
$this->ultima_consulta mysqli_query($this->link$consulta);
//Aqui me devuelve un error, diciendo que el parametro 1 de la funcion mysqli_query debio ser de mysqli, pero se supone que ya lo es al crear la conexion
}


Devuelve el error que mencione en la funcion consultar

probe a ver si se almacenaba en la variable link el indicador con un var_dump justo despues de hacer la conexion y en efecto se guardo, pero cuando hago uso de la funcion consultar resulta que la varible esta nula y no entiendo el por que..

alguien podria explicarme que sucede, Muchas Gracias!
  #2 (permalink)  
Antiguo 12/08/2015, 17:46
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: problemas con identificador de mysqli en clase

Cita:
pero cuando hago uso de la funcion consultar resulta que la varible esta nula y no entiendo el por que..
¿Y por qué no muestras dicho código donde usas tu clase para entender mejor?
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 12/08/2015, 17:58
Avatar de ColdFusion  
Fecha de Ingreso: octubre-2008
Ubicación: Tocoa, Colon Honduras C.A.
Mensajes: 419
Antigüedad: 15 años, 6 meses
Puntos: 9
Respuesta: problemas con identificador de mysqli en clase

Código PHP:
$bd = new bd();
//asumiendo que los valores para esta conexion estan en constantes
$bd->conectar(db_nombre,db_host,db_usuario,db_pass);
 
//Aqui quiero hacer una consulta
$email $datos['email'];
$bd->consultar("SELECT * FROM $bd->usuarios WHERE email='$email'"); 
devulve el error porque el identificador usado dentro de la clase se encuentra nulo.
  #4 (permalink)  
Antiguo 12/08/2015, 18:05
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: problemas con identificador de mysqli en clase

Imprime algo al inicio de ambos métodos y muestra en qué orden se imprimen las cosas, está muy extraño que tome como null dicha propiedad.

O bien, has un var_dump() de $bd->link después de conectar en el script donde ejecutas la consulta (afuera) para ver que sale.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #5 (permalink)  
Antiguo 13/08/2015, 07:36
Avatar de ColdFusion  
Fecha de Ingreso: octubre-2008
Ubicación: Tocoa, Colon Honduras C.A.
Mensajes: 419
Antigüedad: 15 años, 6 meses
Puntos: 9
Respuesta: problemas con identificador de mysqli en clase

tras generar la conexion a la bd, uso el var_dump con la variable link y me devuelve esto:
Cita:
object(mysqli)#2 (0) { }
luego, vuelvo a usar el var_dump justo despues de hacer una consulta y no devuelve nada, la consulta me devuelve esto:
Cita:
Warning: mysqli_query() expects parameter 1 to be mysqli, null given
es como si la variable link se reiniciara despues de unos segundos.
  #6 (permalink)  
Antiguo 13/08/2015, 09:48
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: problemas con identificador de mysqli en clase

Quisiera creer que el código que muestras es el código real, pero parece que desafía la lógica básica.

¿Podrías mostrar el 100% del código, tan la definición de la clase, como el uso de la misma?
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #7 (permalink)  
Antiguo 13/08/2015, 11:11
Avatar de ColdFusion  
Fecha de Ingreso: octubre-2008
Ubicación: Tocoa, Colon Honduras C.A.
Mensajes: 419
Antigüedad: 15 años, 6 meses
Puntos: 9
Respuesta: problemas con identificador de mysqli en clase

Bueno, creo que el problema radica en que la clase BD que uso se hereda a dos clases a la misma vez.

tengo dos clases mas, una se encarga de la mayoria de trabajos de la web (Core) y la otra se encarga de el manejo de los usuarios. Ambas heredan a la misma vez la clase BD.

pero solo la clase "Core" es la que hace conexion y solo las consultas de esta no tiran error, Sin embargo, solo sucede con el mysqli, porque cuando usaba mysql no habia ningun problema al hacer consultas desde ambas clases.

alguna sugerencia?
  #8 (permalink)  
Antiguo 13/08/2015, 11:15
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: problemas con identificador de mysqli en clase

Cita:
alguna sugerencia?
Muestra el código.

Pues así como explicas el problema es la herencia de tus clases.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #9 (permalink)  
Antiguo 13/08/2015, 11:56
Avatar de ColdFusion  
Fecha de Ingreso: octubre-2008
Ubicación: Tocoa, Colon Honduras C.A.
Mensajes: 419
Antigüedad: 15 años, 6 meses
Puntos: 9
Respuesta: problemas con identificador de mysqli en clase

Ok.

Clase core
Código PHP:
class core extends DB {
//Contenido
public function extraer_config() {
$c $this->consultar($sql); //Funcion heredada de la clase BD
return $this->fetchObjetos($c); // Funcion heredada de la clase BD
}

Clase usuario
Código PHP:
class usuario extends DB {
//Contenido
public function extraer_usuario($id)
$c $this->consultar($sql); //Hago uso de la funcion heredada de BD
return $this->fetchObjetos($c);

Cuando creo instancias lo hago de esta manera
Código PHP:
require_once "clases/db.class.php";
require 
"clases/class.core.php";
require 
"clases/class.usuario.php";

$Core = new core();
$Core->conectar(db_nombre,db_host,db_usuario,db_pass); // esta es la unica conexion que hago y es desde la clase core
var_dump($Core->link); // hasta aqui si me muestra el objeto mysqli creado, es usado desde la clase Core
$usuario = new usuario();

$usuario->extraer_usuario($id); // aqui ocurre el problema, cuando hago uso de las funciones heredadas de BD, el identificador link esta vacio. 
Justo al intentar extraer es cuando sucede el error
Cita:
Warning: mysqli_query() expects parameter 1 to be mysqli, null given
La verdad nunca habia usado esto de heredar una clase a otras dos y no se si es correcto o si es posible y talvez lo este haciendo incorrectamente.

Deberia crear la conexion desde ambas clases?

Última edición por ColdFusion; 13/08/2015 a las 12:03
  #10 (permalink)  
Antiguo 13/08/2015, 12:11
Avatar de Uncontroled_Duck
Colaborador
 
Fecha de Ingreso: mayo-2011
Ubicación: Málaga [Spain]
Mensajes: 806
Antigüedad: 12 años, 11 meses
Puntos: 261
Respuesta: problemas con identificador de mysqli en clase

Por lo pronto:

Código PHP:
class usuario extends DB
{
    public function 
extraer_usuario($id# <-- $id no se está usando
    
# <-- falta
        
$c $this->consultar($sql); # <-- $sql no está definida
        
return $this->fetchObjetos($c);
    } 
# <-- falta

__________________
Todos agradeceremos que pongas el código en su respectivo Highlight
  #11 (permalink)  
Antiguo 13/08/2015, 12:20
Avatar de ColdFusion  
Fecha de Ingreso: octubre-2008
Ubicación: Tocoa, Colon Honduras C.A.
Mensajes: 419
Antigüedad: 15 años, 6 meses
Puntos: 9
Respuesta: problemas con identificador de mysqli en clase

Cita:
Iniciado por Uncontroled_Duck Ver Mensaje
Por lo pronto:

Código PHP:
class usuario extends DB
{
    public function 
extraer_usuario($id# <-- $id no se está usando
    
# <-- falta
        
$c $this->consultar($sql); # <-- $sql no está definida
        
return $this->fetchObjetos($c);
    } 
# <-- falta

los codigos anteriores son ejemplos no completos, pero el problema aqui no son ellas si no problemas de herencia de clases. Gracias de todo modos pato descontrolado.
  #12 (permalink)  
Antiguo 13/08/2015, 13:42
Avatar de ColdFusion  
Fecha de Ingreso: octubre-2008
Ubicación: Tocoa, Colon Honduras C.A.
Mensajes: 419
Antigüedad: 15 años, 6 meses
Puntos: 9
Respuesta: problemas con identificador de mysqli en clase

bueno, logre solucionar el problema creando la conexion desde ambas clases, sin embargo, no se si es una buena practica o existe una mejor forma de hacerlo, en todo caso sigo esperando sus consejos.

Gracias!
  #13 (permalink)  
Antiguo 13/08/2015, 13:51
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: problemas con identificador de mysqli en clase

Precisamente esa es la ventaja de usar herencia, ¿no crees que al inicializar la clase se debería crear la conexión por si misma?

Así, cuando heredas sólo invocas el constructor del padre usando parent::, porque eso de duplicar código y métodos viola las reglas básicas de OOP.

Y siendo así: mejor no uses OOP.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #14 (permalink)  
Antiguo 13/08/2015, 21:10
Avatar de ColdFusion  
Fecha de Ingreso: octubre-2008
Ubicación: Tocoa, Colon Honduras C.A.
Mensajes: 419
Antigüedad: 15 años, 6 meses
Puntos: 9
Respuesta: problemas con identificador de mysqli en clase

Cita:
Iniciado por pateketrueke Ver Mensaje
Precisamente esa es la ventaja de usar herencia, ¿no crees que al inicializar la clase se debería crear la conexión por si misma?

Así, cuando heredas sólo invocas el constructor del padre usando parent::, porque eso de duplicar código y métodos viola las reglas básicas de OOP.

Y siendo así: mejor no uses OOP.
tenes toda la razon. Gracias por el consejo del constructor.

Etiquetas: clase, identificador, mysql, mysqli, variable
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 16:35.