Foros del Web » Programando para Internet » PHP »

Problema con clase para conectar a la bd

Estas en el tema de Problema con clase para conectar a la bd en el foro de PHP en Foros del Web. Hola de nuevo a todos, quiero aprender a programar usando objetos y por ello me puse a crear mi conexion de base de datos con ...
  #1 (permalink)  
Antiguo 09/08/2012, 09:43
 
Fecha de Ingreso: abril-2012
Mensajes: 590
Antigüedad: 12 años
Puntos: 58
Problema con clase para conectar a la bd

Hola de nuevo a todos,

quiero aprender a programar usando objetos y por ello me puse a crear mi conexion de base de datos con uno. Poder cambiar de bd, conectar, ejecutar consulta, etc. Hasta aquí he llegado:

Código PHP:
class conexion_bd {
    var 
$usuario    'carlos';
    var 
$clave      'carlos';
    var 
$servidor   'localhost';            
    var 
$nombreBD   'pruebas2';
    function 
ejecuta_consulta($consulta) {        
        
$conexion mysql_connect($this->servidor$this->usuario$this->clave) or die (mysql_error("No se pudo conectar"));
        
mysql_select_db$this->nombreBD$conexion ) or die( mysql_error$conexion ) );        
        return 
mysql_query$consulta$conexion) or die( mysql_error$conexion ));
    }
    function 
cerrar_conexion() {
        if (isset(
$this->conexion)) {
            
mysql_close();
            unset(
$this->conexion);
        }
    }
    function 
elige_bd($db) {
        
$this->nombreBD $db;
    }
}
$consulta_bd = new conexion_bd();
$resultado $consulta_bd->ejecuta_consulta("SELECT * FROM persona");
 while (
$fila mysql_fetch_array($resultado)) 
 {
        echo 
$fila['nombre'];
        echo 
"<br />";
 } 
Probablemente sea un horror ya que lo hice como pude. Primero leí bastantes tutoriales y luego intenté crear mi clase. El problema es al llegar al While me dice que $fila tiene un valor boleano y no se como solucionarlo.

¿Donde está el fallo? Si veis alguna otra cosa mal se agradece.
  #2 (permalink)  
Antiguo 09/08/2012, 11:02
Avatar de KsrZ  
Fecha de Ingreso: abril-2011
Ubicación: /home/KsrZ/Desktop
Mensajes: 156
Antigüedad: 13 años
Puntos: 26
Respuesta: Problema con clase para conectar a la bd

deberías revisar esto
return mysql_query( $consulta, $conexion) or die( mysql_error( $conexion ));
o bien, existen filas en tu tabla..? la tabla existe? la base de datos?

aconsejable :
1 abres base de datos,
2 tomas o pones datos,
3 cierras..

des aconsejable :
1 abres base de datos
2 tomas o pones datos
3 nunca se cerro, y luego se abrirá otra y otra..

lo mejor que podrias hacer en esa clase es aplicar un debug
para die mas que nada die($this->Debug('Error o problema'))

private function Debug($bar = false){
if($this->debug == true) // esta activado el debug?
if($bar) echo $bar; //imprime la salida del error si debug es true
else return $this->debug; //retorna el estado del debug si $bar no se definio o es false
}
}
__________________
for (var i = 0; i < 2; i++){
i = !confirm("Trata a tu código como a ti mismo.. este te esta representando.. no te dejes mal parado")? 0 : i;
}

Última edición por KsrZ; 09/08/2012 a las 11:11
  #3 (permalink)  
Antiguo 09/08/2012, 15:11
Avatar de cuasatar  
Fecha de Ingreso: junio-2011
Ubicación: Bogotá Rock City
Mensajes: 1.230
Antigüedad: 12 años, 10 meses
Puntos: 181
Respuesta: Problema con clase para conectar a la bd

Hola, yo tampoco es que sea el experto en POO pero a las bravas poco a poco he logrado mejorar mis implementaciones.

Como consejo personal te recomiendo que mejores esta parte:

Código PHP:
    var $usuario    'carlos';
    var 
$clave      'carlos';
    var 
$servidor   'localhost';            
    var 
$nombreBD   'pruebas2'
Se supone que si estas creando una clase debe ser reutilizable para muchas aplicaciones. Por eso es mejor trabajar así:

Código PHP:
$consulta_bd = new conexion_bd();
$consulta_bd ->usuario="carlos";
etc... 
De esa forma cada vez que tu función tenga que conectar con otra base de datos no deberas modificarla por dentro (lo cual no tiene mucho sentido).

Sobre lo que comenta KsrZ deberias pegarle una revisada a como abres y cierras el aplicativo. En ningún lado veo que estas cerrando la conexión y no me parece que este bien implementado cerrar_conexion.
__________________
Blog de humor http://elcuasatar.net63.net/
  #4 (permalink)  
Antiguo 10/08/2012, 01:50
 
Fecha de Ingreso: abril-2012
Mensajes: 590
Antigüedad: 12 años
Puntos: 58
Respuesta: Problema con clase para conectar a la bd

Muchas gracias por los consejos. Me ha gustado especialmente lo de debug. En cuanto a lo de cerrar conexion es que como ni si quiera me conecta no llegué a ver lo de cerrar conexión. La consulta desde PHPmyAdmin funciona bien.

Voy a implementar vuestros consejos y os cuento. Muchas gracias.
¿sabéis de algún libro o tutorial para aprender programación de objetos?

En realidad las variables por defecto las quería definir en el constructor para luego cambiarlas desde funciones si es necesario. Pero cuando lo hago me lo marca como error el Netbeans:

Código PHP:
    function __construct() {
        var 
$usuario    'carlos';
        var 
$clave      'carlos';
        var 
$servidor   'localhost';            
        var 
$nombreBD   'pruebas2';
    } 
No se por qué eso no es correcto. Tenía entendido que el constructor es para definir variables sobretodo.

Edición 10:05 :

Al final he conseguido solucionarlo cambiando:
Código PHP:
return mysql_query$consulta$conexion) or die( mysql_error$conexion )); 

Por:
Código PHP:
$resultado mysql_query$consulta$conexion) or die( mysql_error$conexion ));
return 
$resultado

También cambié la definición de las variables:
Código PHP:
 var $usuario;
    var 
$clave;
    var 
$servidor;
    var 
$nombreBD;
    function 
__construct($c_usuario 'carlos'$c_clave 'carlos'$c_servidor 'localhost'$c_nombreBD='pruebas2') {
        
$this->usuario $c_usuario;
        
$this->clave $c_clave;
        
$this->servidor $c_servidor;
        
$this->nombreBD $c_nombreBD;
    } 
No se si es correcto o no pero he visto que en php.net definen así en algún ejemplo. Seguiré probando ahora con lo de debug aver si consigo implementarlo.

Edición a las 10:34 :

Al final me ha quedado así. Parece funcionar todo.
Código PHP:
class conexion_bd {
    var 
$usuario;
    var 
$clave;
    var 
$servidor;
    var 
$nombreBD;
    function 
__construct($c_usuario 'carlos'$c_clave 'carlos'$c_servidor 'localhost'$c_nombreBD='pruebas2') {
        
$this->usuario $c_usuario;
        
$this->clave $c_clave;
        
$this->servidor $c_servidor;
        
$this->nombreBD $c_nombreBD;
    }
    function 
ejecuta_consulta($consulta) {        
        
$conexion mysql_connect($this->servidor$this->usuario$this->clave) or die (mysql_error("$this->debug('Error al conectar'"));
        
mysql_select_db$this->nombreBD$conexion ) or die( mysql_error"$this->debug('Error al seleccionar base de datos'" ) ); 
        
$resultado mysql_query$consulta$conexion) or die( mysql_error"$this->debug('Error al ejecutar la consulta" ));
         
mysql_close();
        return 
$resultado;
    }
    function 
elige_bd($db) {
        
$this->nombreBD $db or die ("$this->debug('Error al seleccionar otra base de datos'");
    }
    function 
debug($error false){
    if(
$this->debug == true)
    if(
$error) echo $error;
    else return 
$this->debug;
    }
}
 
$consulta_bd = new conexion_bd(); 
 
$resultado $consulta_bd->ejecuta_consulta("SELECT * FROM persona");
 while (
$fila mysql_fetch_array($resultado)) 
 {
        echo 
$fila['nombre'];
        echo 
"<br />";
 } 

Última edición por alyciashape; 10/08/2012 a las 02:38
  #5 (permalink)  
Antiguo 10/08/2012, 05:35
Avatar de cuasatar  
Fecha de Ingreso: junio-2011
Ubicación: Bogotá Rock City
Mensajes: 1.230
Antigüedad: 12 años, 10 meses
Puntos: 181
Respuesta: Problema con clase para conectar a la bd

Hola, me alegra mucho que hayas logrado mejorar tu aplicativo. Como lo habias construido inicialmente no me parecia que estaba diseñado para construir constructores y por tanto te recomende que lo hicieras de la otra forma (Igual cualquiera de las dos es correcta).

Con respecto a alguna pagina donde puedas mejorar tus conocimientos de POO creo que todo el mundo te dira lo mismo.

http://www.phpya.com.ar/poo/

Es mas creo que deberia estudiarla aun mas porque nunca la he terminado de leer completa pero aquí fue donde después de muchos porrazos logre entender como funciona la POO.
__________________
Blog de humor http://elcuasatar.net63.net/
  #6 (permalink)  
Antiguo 10/08/2012, 05:54
 
Fecha de Ingreso: abril-2012
Mensajes: 590
Antigüedad: 12 años
Puntos: 58
Respuesta: Problema con clase para conectar a la bd

Muchas gracias por la web, es justo lo que necesitaba!

Etiquetas: bd, clase, mysql, usuarios
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 18:25.