Foros del Web » Programando para Internet » PHP »

Coneccion a DB con objetos (ayuda)

Estas en el tema de Coneccion a DB con objetos (ayuda) en el foro de PHP en Foros del Web. Amigos: estoy TRATANDO de conectar a MySQL usando objetos pero hago algo mal.... y no se que es. El error q obtengo es Warning: mysql_connect() ...
  #1 (permalink)  
Antiguo 01/01/2008, 21:17
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años
Puntos: 292
Pregunta Coneccion a DB con objetos (ayuda)

Amigos:
estoy TRATANDO de conectar a MySQL usando objetos pero hago algo mal.... y no se que es. El error q obtengo es

Warning: mysql_connect() [function.mysql-connect]: Access denied for user 'ODBC'@'localhost' (using password: NO) in C:\xampp\htdocs\class.mysql.inc on line 18 - Access denied for user 'ODBC'@'localhost' (using password: NO)

El tema es q host, user, pass y base estan correctos. La libreria que uso es este include:

Código PHP:
<?php   
class DB_SQL{   
  private 
$conexion;   
  private 
$total_consultas;   
   
  
/* public: connection parameters */
  
public $host     "";
  public 
$database "";
  public 
$user     "";
  public 
$password "";
   
 public function 
DB_SQL() {
 
// constructor    
 
}    
 
 public function 
conecta(){
 if(!isset(
$this->conexion) ){   //&& isset($host) && isset($user)  && isset($password)   ){   
      
$this->conexion = (mysql_connect($host,$user,$password)) or die(mysql_error());   
      
mysql_select_db($database,$this->conexion) or die(mysql_error());   
 }       
 }
 
 public function 
consulta($consulta){   
  
$this->total_consultas++;   
   
//if(isset($this->conexion)) {
    
$resultado mysql_query($consulta,$this->conexion);   
    if(!
$resultado){   
      echo 
'MySQL Error: ' mysql_error();   
      exit;   
    
//}          
   
}   
 return 
$resultado;    
 }
 
public function 
fetch_array($consulta){    
   return 
mysql_fetch_array($consulta);   
 }   
public function 
num_rows($consulta){    
  
//return mysql_num_rows($consulta);   
 
}   
public function 
getTotalConsultas(){   
  return 
$this->total_consultas;   
 }   
}
y lo uso asi:

Código PHP:
<?php
Include("class.mysql.inc");

class 
MYSQL extends DB_SQL {
  public 
$host "localhost";
  public 
$database "betadir";
  public 
$user "betadir";
  public 
$password "*****";
}
   
$db = new MYSQL();   
$consulta $db->conecta();
$consulta $db->consulta("SELECT id FROM categorias");   
if(
$db->num_rows($consulta)>0){   
  while(
$resultados $db->fetch_array($consulta)){   
    echo 
"ID: ".$resultados['id']."<br />";   
}   
}  
?>
ideas ?
__________________
Salu2!
  #2 (permalink)  
Antiguo 01/01/2008, 21:30
Avatar de vevni  
Fecha de Ingreso: julio-2005
Ubicación: cancun mexico
Mensajes: 598
Antigüedad: 18 años, 9 meses
Puntos: 3
Re: Coneccion a DB con objetos (ayuda)

bueno, se supone que cuando heredas de otra clase base, se heredan las propiedades entonces no tienes que redefinir otras ves las propiedades abajo.....

tengo entendido que cuando heredas las propiedades simplemente las usas y ya... no tienes que declararlas, ahora, como las definiste de nuevo abajo, lo que hace es, que esta tomando los valores de la subclase y cuando te conectas con pos la funcion toma como base lo de arriba, ahora bien, porque no usaste this en el pwd, usuario y servidor...

por ejemplo en c# cuando vas a usar una funcion que tiene el mismo nombre que de la clase padre, se usa la instruncion base.nombre_funcion.. asi te refieres explicitamente que estas tomando la funcion de la clase padre y no la de la subclase...
pienso que aqui se aplica =, trata haciendolo asi, si tienes problemas de nuevo, comentalo please!
__________________
Código PHP:
echo"hola mundo ver 1221332143.02";
echo
"cuantos usuarios habran impreso hola mundo en el mundo.!???"
  #3 (permalink)  
Antiguo 01/01/2008, 21:32
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años
Puntos: 292
Re: Coneccion a DB con objetos (ayuda)

El problema que veo es que no logro pasarle los parametros (host, database,... password) a la parte donde se abre la coneccion.

He probado con public, var..... per no doy en el clavo! cuando hago un echo de $host, etc. antes de mysql_connect() no hay resultado! (cadenas vacias)

Ayudita...please...
__________________
Salu2!
  #4 (permalink)  
Antiguo 01/01/2008, 21:36
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años
Puntos: 292
Re: Coneccion a DB con objetos (ayuda)

Vevni: la idea es hacer una clase que no tenga los datos de coneccion de ninguna base de datos en particular para generalizar.

La idea de la super-clase es pasarle los parametros a la subclase...... pero no entiendo mucho lo que estoy haciendo.

Quiero aclarar que DENTRO de la subclase (la puedo llamar directamente) si declaro $host="localhost", etc... y luego hago un ECHO,...sale todo en blanco!

Tenes idea por que ???
__________________
Salu2!
  #5 (permalink)  
Antiguo 01/01/2008, 21:40
Avatar de vevni  
Fecha de Ingreso: julio-2005
Ubicación: cancun mexico
Mensajes: 598
Antigüedad: 18 años, 9 meses
Puntos: 3
Re: Coneccion a DB con objetos (ayuda)

esk tambien tienes problemas de diseño...

yo no se porque conecta no lo parametrizaste,,,
osea recibe los parametros de usuario, conexion, servidor y lo asignas....

ademas lo que te comento, cuando heredas, heredas partes publicas, las privadas no, al menos que sean protected..

las propiedades con = NOMBRE se sobrescriben......

como te digo, debes hacer explicitamente las cosas, en la funciones de arriba cuando asignas el usuario,contraseña y servidor, usa this.

Código PHP:
if(!isset($this->conexion) ){   //&& isset($host) && isset($user)  && isset($password)   ){   
      
$this->conexion = (mysql_connect($host,$user,$password)) or die(mysql_error());   
      
mysql_select_db($database,$this->conexion) or die(mysql_error());   
 } 
pruebalo y veras!
__________________
Código PHP:
echo"hola mundo ver 1221332143.02";
echo
"cuantos usuarios habran impreso hola mundo en el mundo.!???"
  #6 (permalink)  
Antiguo 01/01/2008, 21:42
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años
Puntos: 292
Re: Coneccion a DB con objetos (ayuda)

He cambiado una parte.... pero ahora me da error en mysql_query

class DB_SQL{
private $conexion;
private $total_consultas;

/* public: connection parameters */

public $host = "localhost";
public $database = "betadir";
public $user = "betadir";
public $password = "xxxxxxxx";

public function DB_SQL() {
// constructor
if(!isset($this->conexion) && isset($host) && isset($user) && isset($password) ){
//echo $host." ".$database." ".$user." ".$password;
$this->conexion = (mysql_connect($this->$host,$this->$user,$this->$password)) or die(mysql_error());
mysql_select_db($database,$this->conexion) or die(mysql_error());
}
}

(...)

El error ahora es Warning: mysql_query(): supplied argument is not a valid MySQL-Link resource in C:\xampp\htdocs\class.mysql.inc on line 31

PD: ahora estoy probando llamar directamente a la subclase DB_SQL
__________________
Salu2!
  #7 (permalink)  
Antiguo 01/01/2008, 21:59
Avatar de vevni  
Fecha de Ingreso: julio-2005
Ubicación: cancun mexico
Mensajes: 598
Antigüedad: 18 años, 9 meses
Puntos: 3
Re: Coneccion a DB con objetos (ayuda)

jejejejj te dije que la conexion no se podia heredar, pues la pusiste como pridada...!!!
si vas a usar $this hazlo en todas y no por partes...

ahora esto $this->variable es correcto, $this->$variable no....
Cita:

public function DB_SQL() {
// constructor
if(!isset($this->conexion) && isset($host) && isset($user) && isset($password) ){
//echo $host." ".$database." ".$user." ".$password;
$this->conexion = (mysql_connect($this->$host,$this->$user,$this->$password)) or die(mysql_error());
mysql_select_db($database,$this->conexion) or die(mysql_error());
}

tienes errorcillos, como en mysql_select_db usas $database m debe ser $this->database.
__________________
Código PHP:
echo"hola mundo ver 1221332143.02";
echo
"cuantos usuarios habran impreso hola mundo en el mundo.!???"
  #8 (permalink)  
Antiguo 01/01/2008, 22:22
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años
Puntos: 292
Re: Coneccion a DB con objetos (ayuda)

Ante todo...gracias! he reformado como dices .... y ahora tengo OTRO error: No database selected

<?php
class DB_SQL{
protected $conexion;
private $total_consultas;

public $host;
public $database;
public $user;
public $password;

public function DB_SQL() {
// constructor
if(!isset($this->conexion) ){ //&& isset($host) && isset($user) && isset($password) ){
echo $this->host." ".$this->database." ".$this->user." ".$this->password."*";

$this->conexion = (mysql_connect($this->host,$this->user,$this->password)) or die(mysql_error());
mysql_select_db($database,$this->conexion) or die(mysql_error());
}
}

public function consulta($consulta){
$this->total_consultas++;
//if(isset($this->conexion)) {
$resultado = mysql_query($consulta,$this->conexion);
if(!$resultado){
echo 'MySQL Error: ' . mysql_error();
exit;
//}
}
return $resultado;
}

public function fetch_array($consulta){
return mysql_fetch_array($consulta);
}
public function num_rows($consulta){
//return mysql_num_rows($consulta);
}
public function getTotalConsultas(){
return $this->total_consultas;
}
}

y lo llamo desde aca:

<?php
Include("class.mysql.inc");

class MYSQL extends DB_SQL {
public $host = "localhost";
public $database = "betadir";
public $user = "betadir";
public $password = "xxxxx";
}

$db = new MYSQL();

$consulta = $db->consulta("SELECT id FROM categorias");
if($db->num_rows($consulta)>0){
while($resultados = $db->fetch_array($consulta)){
echo "ID: ".$resultados['id']."<br />";
}
}
?>

Alguna idea de este nuevo error ??? he comprobado que el servidor MySQL esta funcionando perfectamente
__________________
Salu2!
  #9 (permalink)  
Antiguo 01/01/2008, 23:05
Avatar de vevni  
Fecha de Ingreso: julio-2005
Ubicación: cancun mexico
Mensajes: 598
Antigüedad: 18 años, 9 meses
Puntos: 3
Re: Coneccion a DB con objetos (ayuda)

no estas pasando en el constructor la base de datos,
y cuando la usas, no usas $this...


mira, puedes inicializar variables al crear un objeto con el constructor
o, puedes crear funciones por separado para inicializar las propiedades del objeto....
__________________
Código PHP:
echo"hola mundo ver 1221332143.02";
echo
"cuantos usuarios habran impreso hola mundo en el mundo.!???"
  #10 (permalink)  
Antiguo 02/01/2008, 07:05
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años
Puntos: 292
Re: Coneccion a DB con objetos (ayuda)

Por fin......... esta todo solucionado! mil gracias por la ayuda!!!!!

PD: excelentes todas tus observaciones! esto me recuerda a cuando empecé con PHP, que siempre me comia el $ o lo ponia despues de la variable como en Basic :)
__________________
Salu2!
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:50.