Foros del Web » Programando para Internet » PHP »

PHP OO Ayuda con clase PHP

Estas en el tema de Ayuda con clase PHP en el foro de PHP en Foros del Web. Hola Foreros estoy implementando el siguiente codigo php y no me funciona el desconectarme de la BD espero me puedan ayudar en que es lo ...
  #1 (permalink)  
Antiguo 27/02/2011, 10:32
 
Fecha de Ingreso: octubre-2009
Mensajes: 104
Antigüedad: 14 años, 6 meses
Puntos: 0
Ayuda con clase PHP

Hola Foreros estoy implementando el siguiente codigo php y no me funciona el desconectarme de la BD espero me puedan ayudar en que es lo que estoy haciendo mal:

Cuando trato de ejecutar el metodo ejecutar_consulta($consulta), me da error en $this->desconectarme;

que podra ser

clase para conectarme y desconectarme a la BD
Código PHP:
Ver original
  1. <?php
  2.     class class_mysql
  3.     {  
  4.         private $conexion;     
  5.         private static $_instance = null;
  6.  
  7.         public static function getInstance() {
  8.             if( self::$_instance == null )
  9.             {
  10.                 self::$_instance = new self();
  11.             }
  12.             return self::$_instance;
  13.          }
  14.         //metodo para conectarme a la BD
  15.         public function conectarme_mysql()
  16.         {
  17.             if(!isset($this->conexion))
  18.             {
  19.                 $this->conexion = (mysql_connect("localhost","root","xxx")) or die(mysql_error());
  20.                 mysql_select_db("ext_aprendiando",$this->conexion) or die(mysql_error());
  21.             }
  22.         }
  23.         //cerrar conexion
  24.         public function cerrar_conexion()
  25.         {
  26.             return mysql_close($this->conexion);
  27.         }  
  28.     }
  29. ?>

clase para hacer las onsultas a la BD

Código PHP:
Ver original
  1. <?php
  2.     require_once "class_conexion_bd.php";
  3.    
  4.     class class_mysql_consultas
  5.     {  
  6.         private $total_consultas;
  7.        
  8.         function __construct()
  9.         {
  10.             $class_mysql = class_mysql::getInstance();
  11.             $this->conecion = $class_mysql->conectarme_mysql();
  12.             $this->desconectarme = $class_mysql->cerrar_conexion();
  13.         }
  14.         //se ejecuta una consulta
  15.         public function ejecutar_consulta($consulta)
  16.         {
  17.             $this->conecion;
  18.             $this->total_consultas++;
  19.             $resultado = @mysql_query($consulta);
  20.             if(!$resultado)
  21.             {
  22.                 echo 'MySQL Error: ' . mysql_error();
  23.                 exit;
  24.             }
  25.             $this->desconectarme;
  26.             return $resultado;
  27.         }
  28.         //debuelbe un array con los resultados de la consulta donde la cual se ve los resultados por el nombre del campo de la BD
  29.         public function fetch_assoc($consulta)
  30.         {
  31.             //$this->coneccion();
  32.             return mysql_fetch_assoc($consulta);
  33.         }
  34.         //me da la cantidad de duplas de un una consulta a la BD
  35.         public function num_rows($consulta)
  36.         {
  37.             //$this->coneccion();
  38.             return mysql_num_rows($consulta);
  39.         }
  40.         //
  41.         public function getTotalConsultas()
  42.         {
  43.             return $this->total_consultas;
  44.         }
  45.     }
  46.    
  47. ?>
  #2 (permalink)  
Antiguo 27/02/2011, 10:41
 
Fecha de Ingreso: octubre-2009
Mensajes: 245
Antigüedad: 14 años, 6 meses
Puntos: 17
Respuesta: Ayuda con clase PHP

Puedes escribir el error que te manda php, por favor
__________________
Saludos.
  #3 (permalink)  
Antiguo 27/02/2011, 10:43
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Ayuda con clase PHP

estas bastante perdido, en ningún momento estas asignando la función aquí...
Código PHP:
$this->desconectarme $class_mysql->cerrar_conexion(); 
lo que haces es asignar el resultado de dicha función, osea que la ejecutas ahí mismo!!
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #4 (permalink)  
Antiguo 27/02/2011, 10:44
 
Fecha de Ingreso: octubre-2009
Mensajes: 104
Antigüedad: 14 años, 6 meses
Puntos: 0
Respuesta: Ayuda con clase PHP

me pone esto:

MySQL Error: Access denied for user 'ODBC'@'localhost' (using password: NO)
  #5 (permalink)  
Antiguo 27/02/2011, 10:49
 
Fecha de Ingreso: octubre-2009
Mensajes: 104
Antigüedad: 14 años, 6 meses
Puntos: 0
Respuesta: Ayuda con clase PHP

Pregunto pq no se que es lo que esta pasando... y como podria solucionar el problema ...

Cita:
Iniciado por pateketrueke Ver Mensaje
estas bastante perdido, en ningún momento estas asignando la función aquí...
Código PHP:
$this->desconectarme $class_mysql->cerrar_conexion(); 
lo que haces es asignar el resultado de dicha función, osea que la ejecutas ahí mismo!!
  #6 (permalink)  
Antiguo 27/02/2011, 10:53
Avatar de carlos_belisario
Colaborador
 
Fecha de Ingreso: abril-2010
Ubicación: Venezuela Maracay Aragua
Mensajes: 3.156
Antigüedad: 14 años
Puntos: 461
Respuesta: Ayuda con clase PHP

los metodos te dan una respuesta cuando los llamas el echo es que quieres guardar la llamada a un metodo en un atributo para luego llamarlo cuando lo desees desde el atributo y eso no es correcto lo que te indico el amigo pateketrueke es la respuesta que necesitas que tienes que hacer llamar a $class_mysql->cerrar_conexion(); donde desees cerrar la conexion, porque de la manera que lo estas haciendo abres y cierras la conexion de una sola vez, espero que haber explicado bien, saludos
__________________
aprende d tus errores e incrementa tu conocimientos
it's not a bug, it's an undocumented feature By @David
php the right way
  #7 (permalink)  
Antiguo 27/02/2011, 10:53
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Ayuda con clase PHP

Cita:
Iniciado por fcmonier85 Ver Mensaje
Pregunto pq no se que es lo que esta pasando... y como podria solucionar el problema ...
¿y no te das cuenta de lo que sucede?

¡estas conectando y desconectando en el constructor de tu clase!!

te sugiero ampliamente que repases la referencia del lenguaje, porque en si tu problema es meramente humano, no de código...
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #8 (permalink)  
Antiguo 27/02/2011, 10:55
Avatar de Patriarka  
Fecha de Ingreso: enero-2011
Ubicación: Moreno, Buenos Aires, Argentina
Mensajes: 2.851
Antigüedad: 13 años, 2 meses
Puntos: 288
Respuesta: Ayuda con clase PHP

Lo que te indica el error es que tenes mal los datos de acceso a la base.

revisalos y cambialos por los que correspondan.

y si, estas despelotado............

pd: la conexion se cierra al final del srcipt.......
  #9 (permalink)  
Antiguo 27/02/2011, 11:05
 
Fecha de Ingreso: octubre-2009
Mensajes: 104
Antigüedad: 14 años, 6 meses
Puntos: 0
Respuesta: Ayuda con clase PHP

grasias a todos ya vi lo que me decias pateketrueke, carlos_belisario y Patriarka. pero lo quito y lo pongo d ela siguiente manera y no me funciona: como deberia quedar:

Código PHP:
Ver original
  1. function __construct()
  2.         {
  3.             $class_mysql = class_mysql::getInstance();
  4.             $this->conecion = $class_mysql->conectarme_mysql();
  5.             //$this->desconectarme = $class_mysql->cerrar_conexion();
  6.         }
  7.         //se ejecuta una consulta
  8.         public function ejecutar_consulta($consulta)
  9.         {
  10.             $this->conecion;
  11.             $this->total_consultas++;
  12.             $resultado = @mysql_query($consulta);
  13.             if(!$resultado)
  14.             {
  15.                 echo 'MySQL Error: ' . mysql_error();
  16.                 exit;
  17.             }
  18.             //$class_mysql->cerrar_conexion();
  19.             return $resultado;
  20.         }

PD: Soy nuevo en esto.
  #10 (permalink)  
Antiguo 27/02/2011, 11:39
 
Fecha de Ingreso: octubre-2009
Mensajes: 104
Antigüedad: 14 años, 6 meses
Puntos: 0
Respuesta: Ayuda con clase PHP

para explciar mejor hago la llamada pero no me funciona es decir pongo el code de la siguiente forma:

Código PHP:
Ver original
  1. function __construct()
  2.         {
  3.             $class_mysql = class_mysql::getInstance();
  4.             //$this->conecion = $class_mysql->conectarme_mysql();
  5.             //$this->desconectarme = $class_mysql->cerrar_conexion();
  6.         }
  7.         //se ejecuta una consulta
  8.         public function ejecutar_consulta($consulta)
  9.         {
  10.             $class_mysql->conectarme_mysql();
  11.             $this->total_consultas++;
  12.             $resultado = @mysql_query($consulta);
  13.             if(!$resultado)
  14.             {
  15.                 echo 'MySQL Error: ' . mysql_error();
  16.                 exit;
  17.             }
  18.             $class_mysql->cerrar_conexion();
  19.             return $resultado;
  20.         }

me da este error:
Fatal error: Call to a member function conectarme_mysql() on a non-object in dir_consultas_bd.php on line 17
  #11 (permalink)  
Antiguo 27/02/2011, 11:43
Avatar de carlos_belisario
Colaborador
 
Fecha de Ingreso: abril-2010
Ubicación: Venezuela Maracay Aragua
Mensajes: 3.156
Antigüedad: 14 años
Puntos: 461
Respuesta: Ayuda con clase PHP

esto tienes que estar es en un atributo para que el ambito abarque toda la clase, ya que como lo tienes la variable $class_mysql esta dentro del ambito es del constructor de tu clase que tienes que hacer cambiarlo a un atributo
Código PHP:
Ver original
  1. $this->class_mysql = class_mysql::getInstance();

de tal manera que en este atributo tienes el objeto que va a hacer la conexion con la base de datos
__________________
aprende d tus errores e incrementa tu conocimientos
it's not a bug, it's an undocumented feature By @David
php the right way
  #12 (permalink)  
Antiguo 27/02/2011, 11:48
 
Fecha de Ingreso: octubre-2009
Mensajes: 104
Antigüedad: 14 años, 6 meses
Puntos: 0
Respuesta: Ayuda con clase PHP

Gracias carlos_belisario: me quedo de la siguiente forma y trabaja de lo mejor grasias:

Código PHP:
Ver original
  1. function __construct()
  2.         {
  3.             $this->class_mysql = class_mysql::getInstance();
  4.         }
  5.         //se ejecuta una consulta
  6.         public function ejecutar_consulta($consulta)
  7.         {
  8.             //me conecto a la BD
  9.             $this->class_mysql->conectarme_mysql();
  10.             //ejecuto consulta
  11.             $resultado = @mysql_query($consulta);
  12.             if(!$resultado)
  13.             {
  14.                 echo 'MySQL Error: ' . mysql_error();
  15.                 exit;
  16.             }
  17.             //me desconecto de la BD
  18.             $this->class_mysql->cerrar_conexion();
  19.             //mand resultado
  20.             return $resultado;
  21.         }
  #13 (permalink)  
Antiguo 27/02/2011, 12:03
Avatar de carlos_belisario
Colaborador
 
Fecha de Ingreso: abril-2010
Ubicación: Venezuela Maracay Aragua
Mensajes: 3.156
Antigüedad: 14 años
Puntos: 461
Respuesta: Ayuda con clase PHP

que bien que hallas acomodado tu clase, es bueno que refuerces las bases de la OOP ya que cuando uno esta comenzando con eso es medio complicado pero reforzando las bases de estas te acostumbras y vas mejorando tus clases por cierto seria bueno que trabajaras un poco con PDO que es una clase nativa de PHP que te permite trabajar con base de datos y puedas heredar tus clase de esta como tal, saludos
__________________
aprende d tus errores e incrementa tu conocimientos
it's not a bug, it's an undocumented feature By @David
php the right way
  #14 (permalink)  
Antiguo 27/02/2011, 12: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: Ayuda con clase PHP

aun que yo no definiria la conexión en una propiedad, tan solo usaría esto:
Código PHP:
class_mysql::getInstance()->cerrar_conexion(); 
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #15 (permalink)  
Antiguo 27/02/2011, 13:50
 
Fecha de Ingreso: octubre-2009
Mensajes: 104
Antigüedad: 14 años, 6 meses
Puntos: 0
Respuesta: Ayuda con clase PHP

Gracias a todos y carlos_belisario vere la clase PDO ya que seria mejor... aunque si puedes decirme donde podría encontrar documentación o ejemplo de su uso te lo agradecería.
  #16 (permalink)  
Antiguo 27/02/2011, 14:02
Avatar de carlos_belisario
Colaborador
 
Fecha de Ingreso: abril-2010
Ubicación: Venezuela Maracay Aragua
Mensajes: 3.156
Antigüedad: 14 años
Puntos: 461
Respuesta: Ayuda con clase PHP

Pues creo que lo primero es ver el manual , tambien el amigo arley da una buena explicacion sobre PDO tambien el amigo Christopher tiene informacion sobre esta http://web2development.blogspot.com/...s-con-pdo.html pero es cuestion de googlear un poco y de seguro encontraras bastante informacion, saludos
__________________
aprende d tus errores e incrementa tu conocimientos
it's not a bug, it's an undocumented feature By @David
php the right way
  #17 (permalink)  
Antiguo 27/02/2011, 14:03
 
Fecha de Ingreso: octubre-2009
Mensajes: 245
Antigüedad: 14 años, 6 meses
Puntos: 17
Respuesta: Ayuda con clase PHP

Cita:
Iniciado por fcmonier85 Ver Mensaje
Gracias a todos y carlos_belisario vere la clase PDO ya que seria mejor... aunque si puedes decirme donde podría encontrar documentación o ejemplo de su uso te lo agradecería.
Usa PDO es una buena decisión, te dejo la liga al manual:
http://www.php.net/manual/es/book.pdo.php
__________________
Saludos.
  #18 (permalink)  
Antiguo 28/02/2011, 17:35
 
Fecha de Ingreso: octubre-2009
Mensajes: 104
Antigüedad: 14 años, 6 meses
Puntos: 0
Respuesta: Ayuda con clase PHP

Hola nuevamente nesesitos de su ayuda denuevo:

clase consultas:
Código PHP:
Ver original
  1. <?php
  2.     require_once "class_conexion_bd.php";
  3.    
  4.     class class_mysql_consultas
  5.     {  
  6.         function __construct()
  7.         {
  8.             $this->class_mysql = class_mysql::getInstance();
  9.         }
  10.         //se ejecuta una consulta
  11.         public function dbquery($consulta)
  12.         {
  13.             //me conecto a la BD
  14.             $this->class_mysql->conectarme_mysql();
  15.             //ejecuto consulta
  16.             $resultado = @mysql_query($consulta);
  17.             if(!$resultado)
  18.             {
  19.                 echo 'MySQL Error: ' . @mysql_error();
  20.                 exit;
  21.             }
  22.             //me desconecto de la BD
  23.             $this->class_mysql->cerrar_conexion();
  24.             //mand resultado
  25.             return $resultado;
  26.         }
  27.         //debuelbe un array con los resultados de la consulta donde la cual se ve los resultados por el nombre del campo de la BD
  28.         public function dbarray($consulta)
  29.         {
  30.             //me conecto a la BD
  31.             //$this->class_mysql->conectarme_mysql();
  32.             //$this->coneccion();
  33.             $resultado = @mysql_fetch_assoc($consulta);
  34.             //me desconecto de la BD
  35.            // $this->class_mysql->cerrar_conexion();
  36.             return $resultado;
  37.            
  38.         }
  39.         //me da la cantidad de duplas de un una consulta a la BD
  40.         public function dbrows($consulta)
  41.         {  
  42.             //me conecto a la BD
  43.             //$this->class_mysql->conectarme_mysql();
  44.             //$this->coneccion();
  45.             $resultado = mysql_num_rows($consulta);
  46.             //me desconecto de la BD
  47.             //$this->class_mysql->cerrar_conexion();
  48.             return $resultado;
  49.         }
  50.     }
  51.    
  52. ?>

clase conexion:
Código PHP:
Ver original
  1. <?php
  2.     class class_mysql
  3.     {  
  4.         private $conexion;     
  5.         private static $_instance = null;
  6.         //singelton
  7.         public static function getInstance() {
  8.             if( self::$_instance == null )
  9.             {
  10.                 self::$_instance = new self();
  11.             }
  12.             return self::$_instance;
  13.          }
  14.         //metodo para conectarme a la BD
  15.         public function conectarme_mysql()
  16.         {
  17.             if(!isset($this->conexion))
  18.             {
  19.                 $this->conexion = (mysql_connect("localhost","root","xxx")) or die(mysql_error());
  20.                 mysql_select_db("ext_aprendiando",$this->conexion) or die(mysql_error());
  21.             }
  22.         }
  23.         //cerrar conexion
  24.         public function cerrar_conexion()
  25.         {
  26.             return mysql_close($this->conexion);
  27.         }  
  28.     }
  29. ?>

pagina php
Código PHP:
Ver original
  1. <?php  
  2.     require_once "class/class_consultas_bd.php";
  3.  
  4.     $class_mysql_consultas = new class_mysql_consultas();
  5.      
  6.     $consulta5 = $class_mysql_consultas->dbquery("SELECT nombre_usuario FROM ext_login WHERE nombre_usuario = 'admin'");
  7.     $cantidad = $class_mysql_consultas->dbrows($consulta5) ;
  8.     echo $cantidad."<br>" ;
  9.  
  10.     $consulta = $class_mysql_consultas->dbquery("SELECT nombre_usuario FROM ext_login");
  11.    
  12.     if($class_mysql_consultas->dbrows($consulta)>0)
  13.     {
  14.         while($resultados = $class_mysql_consultas->dbarray($consulta))
  15.         {
  16.             echo "ID: ".$resultados['nombre_usuario']."<br />";
  17.         }
  18.     }
  19. ?>

la cuestion es la siguiente cuando ejecuto el llamado a la funcion dbquery que la llamo en la pagina php dos veses me da bateo, es decir me pone este error:

4
MySQL Error: Access denied for user 'ODBC'@'localhost' (using password: NO)

y en el primero si se conecta pero ya para el segundo llamado no se conecta...

la cosa es que no se pq pasa pq me conecto y me desconecto cuando llamo ala funcion...
  #19 (permalink)  
Antiguo 28/02/2011, 21:38
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Ayuda con clase PHP

en primer lugar no es necesario que conectes y desconectes en cada consulta, si conectas tan solo una ves en el constructor y -de hecho- jamás cierras la conexión debería ir todo bien, ya que php cierra las conexiones automáticamente al finalizar el script...

o bien, al momento de desconectar procura eliminar el valor de $this->conexion ya que al no hacerlo seguramente la conexión intenta usar un apuntador que ya has destruido...
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #20 (permalink)  
Antiguo 01/03/2011, 06:47
 
Fecha de Ingreso: octubre-2009
Mensajes: 104
Antigüedad: 14 años, 6 meses
Puntos: 0
Respuesta: Ayuda con clase PHP

ahh gracias pateketrueke puse en el costructor de la clase class_mysql_consultas

Código PHP:
Ver original
  1. function __construct()
  2.         {
  3.             $this->class_mysql = class_mysql::getInstance();
  4.             $this->class_mysql->conectarme_mysql();
  5.         }

y me trabajo bien asi es como me decias ???

Saludos
  #21 (permalink)  
Antiguo 01/03/2011, 07:19
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Ayuda con clase PHP

¡excelente!
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.

Etiquetas: clase
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 14:25.