Foros del Web » Programando para Internet » PHP » Frameworks y PHP orientado a objetos »

iniciando con php oop, problema con seleccionar base de datos

Estas en el tema de iniciando con php oop, problema con seleccionar base de datos en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Hola, bueno he leido tanto sobre oop, que ya no se si cabe mas en mi cabeza... bueno el caso es que trate de hacer ...
  #1 (permalink)  
Antiguo 06/08/2007, 09:04
Avatar de asinox  
Fecha de Ingreso: enero-2002
Ubicación: Santo Domingo
Mensajes: 2.712
Antigüedad: 22 años, 3 meses
Puntos: 6
iniciando con php oop, problema con seleccionar base de datos

Hola, bueno he leido tanto sobre oop, que ya no se si cabe mas en mi cabeza... bueno el caso es que trate de hacer mi primer php oop, solo es una coneccion a base de datos y un query... pero me dice el clasico error :
Código PHP:
No database selected 
Alguien me dice si las clases estan bien y por que es el error?
Código PHP:
class Connectar{
    var 
$usuario;
    var 
$pass;
    var 
$host;
    var 
$error;
    var 
$basedatos;
    var 
$enlace;
    var 
$db_select;
    
    function 
__construct($host,$usuario,$pass,$basedatos){
        
$this->host=$host;
        
$this->usuario=$usuario;
        
$this->pass=$pass;
        
$this->basedatos=$basedatos;
    }
    
    
/*function err(){
        echo $this->error = mysql_error();
    }*/
    
    
function conecta(){
        
$this->enlace=mysql_connect($this->host,$this->usuario,$this->pass) or die(mysql_error());
        
$this->db_select=mysql_select_db($basedatos,$this->enlace)or die(mysql_error());            
    }
}
$obj = new Connectar("localhost","root","","oop_db");
$obj->conecta();

/* clase para consultar datos */

class Consulta extends Connectar{
    var 
$consulta;
    var 
$resultado;
    var 
$query;
    var 
$tabla;
    var 
$row;
    
    
/*function __construct(){
        $this->query=$query;
    }*/
    
function datos($query){
        
$this->consulta=mysql_query($query,$this->db_select)or die("Error en consulta ".mysql_error());
    }
}
$obj2 = new Consulta();
$obj2->datos("SELECT * FROM tbl_usuarios"); 
saludos
__________________
www.dataautos.com
  #2 (permalink)  
Antiguo 06/08/2007, 09:11
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Re: iniciando con php oop, problema con seleccionar base de datos

Tienes tres grandes errores, el primero, es estas llamando a conecta pero sin embargo en tu clase consulta lo heredas, asi que no es necesario llamar a conecta si ya lo estas heredando.

Segundo, si ves la funcion mysql_select_db te devuelve un booleano si seleccion o no la base de datos. No creo que debas de almacenar este resultado en una variable.

Tercero, la funcion mysql_query espera como segundo parametro un recurso con el enlace a la conexion a la base de datos para poder descargar el resultado, tu le estas pasando null (ya que nunca conectaste desde tu clase).

Te dejo la clase corregida:
Código PHP:
class Connectar{
    var 
$usuario;
    var 
$pass;
    var 
$host;
    var 
$error;
    var 
$basedatos;
    var 
$enlace;
    var 
$db_select;
    
    function 
__construct($host,$usuario,$pass,$basedatos){
        
$this->host=$host;
        
$this->usuario=$usuario;
        
$this->pass=$pass;
        
$this->basedatos=$basedatos;
    }
    
    
/*function err(){
        echo $this->error = mysql_error();
    }*/
    
    
function conecta(){
        
$this->enlace=mysql_connect($this->host,$this->usuario,$this->pass) or die(mysql_error());
         
mysql_select_db($basedatos,$this->enlace)or die(mysql_error());            
    }
}
/*
$obj = new Connectar("localhost","root","","oop_db");
$obj->conecta();
*/
/* clase para consultar datos */

class Consulta extends Connectar{
    var 
$consulta;
    var 
$resultado;
    var 
$query;
    var 
$tabla;
    var 
$row;
    
    function 
__construct($host,$usuario,$pass,$basedatos){
         
parent::__construct($host,$usuario,$pass,$basedatos);
         
$this->conecta();
    }
    function 
datos($query){
        
$this->consulta=mysql_query($query,$this->enlace)or die("Error en consulta ".mysql_error());
    }
}
$obj2 = new Consulta("localhost","root","","oop_db");
$obj2->datos("SELECT * FROM tbl_usuarios"); 
Saludos.
  #3 (permalink)  
Antiguo 06/08/2007, 09:13
Avatar de asinox  
Fecha de Ingreso: enero-2002
Ubicación: Santo Domingo
Mensajes: 2.712
Antigüedad: 22 años, 3 meses
Puntos: 6
Re: iniciando con php oop, problema con seleccionar base de datos

Ah gracias man, que bueno que solo eran 3 errores :)

bueno comparo lo tuyo con lo mio pa poder saber cual es el "meneo" ;)

Saludos
__________________
www.dataautos.com
  #4 (permalink)  
Antiguo 06/08/2007, 09:17
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Re: iniciando con php oop, problema con seleccionar base de datos

Como otro tip, si estas usando PHP5, no debes de usar var, tienes que cambiarlo por public, private, o protected.

Tambien las funciones tienes que darles su ambito, es decir si son public, private o protected.

Saludos.
  #5 (permalink)  
Antiguo 06/08/2007, 09:20
Avatar de asinox  
Fecha de Ingreso: enero-2002
Ubicación: Santo Domingo
Mensajes: 2.712
Antigüedad: 22 años, 3 meses
Puntos: 6
Re: iniciando con php oop, problema con seleccionar base de datos

:( aun sigue el mismo error
__________________
www.dataautos.com
  #6 (permalink)  
Antiguo 06/08/2007, 09:26
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Re: iniciando con php oop, problema con seleccionar base de datos

Perdon mi error.

Esto esta mal:
Código PHP:
mysql_select_db($basedatos,$this->enlace)or die(mysql_error()); 
Debe de ser asi:
Código PHP:
mysql_select_db($this->basedatos,$this->enlace)or die(mysql_error()); 
  #7 (permalink)  
Antiguo 06/08/2007, 09:29
Avatar de asinox  
Fecha de Ingreso: enero-2002
Ubicación: Santo Domingo
Mensajes: 2.712
Antigüedad: 22 años, 3 meses
Puntos: 6
Re: iniciando con php oop, problema con seleccionar base de datos

Gracias :)

principalmente por los tips

Saludos
__________________
www.dataautos.com
  #8 (permalink)  
Antiguo 07/08/2007, 12:03
Avatar de Carxl
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: Bogotá
Mensajes: 2.993
Antigüedad: 17 años, 9 meses
Puntos: 70
De acuerdo Re: iniciando con php oop, problema con seleccionar base de datos

Hola...

GatorV, dices que si maneja Php5 no utilice var..., yo utilizo php5 y utilizo var

Osea que debe ser public, private y eso...

Me puedes regalar un ejemplo por fa??

Gracias de antemano...

Y asinox, ya somos dos los que intentamos aprender POO en php5 , te deseo èxitos en ese proceso!!!

Chau
__________________
Hay 10 tipos de personas, los que entienden binario y los que no. (Anónimo)
www.programandoweb.com
  #9 (permalink)  
Antiguo 07/08/2007, 12:29
Avatar de asinox  
Fecha de Ingreso: enero-2002
Ubicación: Santo Domingo
Mensajes: 2.712
Antigüedad: 22 años, 3 meses
Puntos: 6
Re: iniciando con php oop, problema con seleccionar base de datos

jeje asi es Carxl, en cuanto a los que dice GatorV , es que en lugar de poner var coloques los "tipos de accesos" "public si tu variable estara disponible para cualquier metodo dentro de tu clase, y bueno "private si es privada, etc"

solo cambia tus var por public o private o protected

Saludos :), yo he leido mucho sobre OOP jejeje pero nunca lograba hacer nada, bueno ahora esta clase ejejej "claro analizando otras", pero ya estoy haciendo cositas :), yo solo necesito hacer algo y por ahi me fuiiii :D

a ver como nos va hermano :D
__________________
www.dataautos.com
  #10 (permalink)  
Antiguo 07/08/2007, 12:33
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Re: iniciando con php oop, problema con seleccionar base de datos

Private.- Variables/metodos privadas del objeto, su visibilidad es solo en el objeto actual.

Public.- Variables/metodos publicos del objeto, pueden ser escritos desde cualquier ambito y llamados desde cualquier ambito, tambien pueden ser reescritos por clases que hereden.

Protected.- Variables/metodos protegidos del objeto, pueden ser reescritos o asignados desde una clase que herede los metodos del padre.

Saludos.
  #11 (permalink)  
Antiguo 07/08/2007, 12:35
Avatar de asinox  
Fecha de Ingreso: enero-2002
Ubicación: Santo Domingo
Mensajes: 2.712
Antigüedad: 22 años, 3 meses
Puntos: 6
Re: iniciando con php oop, problema con seleccionar base de datos

ahi ta :), mejor de ahi no existe :D
__________________
www.dataautos.com
  #12 (permalink)  
Antiguo 08/08/2007, 08:19
Avatar de Carxl
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: Bogotá
Mensajes: 2.993
Antigüedad: 17 años, 9 meses
Puntos: 70
Pregunta Re: iniciando con php oop, problema con seleccionar base de datos

Listo GatorV, muchas gracias por la explicaciòn...

Ahora como siempre , me surge la duda existencial: Cuando utilizar la respectiva "visibilidad"(asì slo denomina el manual oficial de php)??. Es decir, cuando sè cuando debo utilizar cada una??, y por que no utilizar siempre "public"??

Gracias de antemano...
__________________
Hay 10 tipos de personas, los que entienden binario y los que no. (Anónimo)
www.programandoweb.com
  #13 (permalink)  
Antiguo 08/08/2007, 08:32
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Re: iniciando con php oop, problema con seleccionar base de datos

Cita:
Iniciado por GatorV Ver Mensaje
Private.- Variables/metodos privadas del objeto, su visibilidad es solo en el objeto actual.

Public.- Variables/metodos publicos del objeto, pueden ser escritos desde cualquier ambito y llamados desde cualquier ambito, tambien pueden ser reescritos por clases que hereden.

Protected.- Variables/metodos protegidos del objeto, pueden ser reescritos o asignados desde una clase que herede los metodos del padre.

Saludos.
Carlx, aqui puse para que son cada visibilidad de los metodos y el para que usarlos es porque depende de cada uso, puedes tener un metodo que no te interesa sea publico pero que sea algo importante de tu clase, o puedes tener un metodo protegido que te interesa sea sobrecargado por una clase que herede a la clase padre para cambiar las cosas por decir:

Código PHP:
class DBTable {
       protected function 
getQuery() {
               return 
sprintf("SELECT * FROM %s"$this->table);
       }
}

class 
miTablaEspecial extends DBTable {
       protected function 
getQuery() {
               return 
"SELECT campo1, campo2 FROM tabla";
       }

Como puedes ver podemos sobrecargar una funcion solamente para que cambie los datos y aun asi usar toda la funcionalidad de la clase padre, solo afectando el codigo que nos interesa.

Saludos.
  #14 (permalink)  
Antiguo 25/10/2007, 10:01
 
Fecha de Ingreso: octubre-2007
Mensajes: 21
Antigüedad: 16 años, 6 meses
Puntos: 0
Re: iniciando con php oop, problema con seleccionar base de datos

GatorV no crees que en la clase consulta en el constructo seria mejor asi


Código PHP:
function __construct($host,$usuario,$pass,$basedatos){
         
parent::__construct($this->host,$this->usuario,$this->pass,$this->basedatos);
         
$this->conecta();
    } 
claro pero funcionaria asi

Código PHP:
$obj = new Connectar("localhost","root","","oop_db");
$obj2 = new Consulta();
$obj2->datos("SELECT * FROM tbl_usuarios"); 
  #15 (permalink)  
Antiguo 25/10/2007, 10:35
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Re: iniciando con php oop, problema con seleccionar base de datos

Cita:
Iniciado por oVuzZ Ver Mensaje
GatorV no crees que en la clase consulta en el constructo seria mejor asi


Código PHP:
function __construct($host,$usuario,$pass,$basedatos){
         
parent::__construct($this->host,$this->usuario,$this->pass,$this->basedatos);
         
$this->conecta();
    } 
claro pero funcionaria asi

Código PHP:
$obj = new Connectar("localhost","root","","oop_db");
$obj2 = new Consulta();
$obj2->datos("SELECT * FROM tbl_usuarios"); 
En la clase consulta no tienes definido inicialmente $this->host (ya que de eso se encarga el constructor de la clase consultar).

Por lo de tu ejemplo no funcionaria ya que el $obj2 (perteneciente a Consulta) no tiene conocimiento de cuales son los datos de conexion, los necesita implicitamente.

Saludos.
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

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 07:13.