Ver Mensaje Individual
  #1 (permalink)  
Antiguo 13/06/2010, 11:00
Avatar de dyegox
dyegox
 
Fecha de Ingreso: enero-2008
Mensajes: 173
Antigüedad: 16 años, 3 meses
Puntos: 7
problema con clases

hola quiero leer los datos de mi base de datos usando una clase pero uso esta clase para conectarme a la base de datos:
Código PHP:
Ver original
  1. <?php
  2. /**
  3.  *
  4.  * @access private
  5.  * @type: class
  6.  * @description: clase para la conexion a la base de datos
  7.  */
  8.  
  9. class bd{
  10.     public $username='root'; //nombre de usuario de la base de datos
  11.     var $password=''; //contrase?a del usuario
  12.     var $servidor='localhost'; //nombre del servidor, normalmente localhost
  13.     var $DBname='default'; //nombre de la base de datos
  14.     var $conn; //necesario para la conexion y desconexion de la base de datos
  15.     var $debug; //modo depuracion, mostrara los errores y los querys
  16.  
  17.     function bd($debug=1){
  18.         //para que en php 4 haya un destructor como en php 4
  19.         register_shutdown_function(array(&$this, '__destruct'));
  20.  
  21.         //constructor
  22.         $argcv = func_get_args();
  23.         call_user_func_array(array(&$this, '__construct'), $argcv);
  24.     }
  25.  
  26.     function x(){
  27.     //para cerrar la conexion mysql
  28.     //debes utlizarla SIEMPRE al final de tu documento
  29.         if(isset($this->conn)) { mysql_close($this->conn); }
  30.     }
  31.    
  32.     function error_mysql($msg,$query=''){
  33.     //muestra el error
  34.         if($this->debug==1 && !empty($query)) $msg .= '<br><b />QUERY:</b><br />'.$query;
  35.         $this->enmarcar($msg);
  36.         $this->x();
  37.         die();
  38.     }
  39.  
  40.     function enmarcar($str){
  41.     //para mostrar los errores dentro de un rectangulo
  42.         echo '<span style="display:block;border:1px red solid;padding:5px;">',$str,'</span>';
  43.     }
  44.  
  45.     function f( $valor ){
  46.     /*
  47.     funcion para evitar ataques sql-injection, debes utilizarla cuando hagas querys
  48.     Ejemplo:
  49.     $query1 = new query("select * from usuarios where nombre='".$bd->f($_POST['nombre'])."' and password='".$bd->f($_POST['password'])."'",$bd);
  50.     */
  51.             if(get_magic_quotes_gpc())
  52.                 $valor = stripslashes($valor);
  53.         if( function_exists('mysql_real_escape_string') )
  54.             return mysql_real_escape_string( $valor );
  55.         else //per PHP inferior a 4.3.0
  56.             return addslashes( $valor );
  57.     }
  58.  
  59.     function __destruct(){
  60.         //el destructor se ejecuta antes de cerrar la ejecucion y con esto cerramos la conexion a la base de datos
  61.         $this->x();
  62.     }
  63.  
  64.  
  65.     function __construct($debug=1)
  66.     {
  67.         //al llamarla conecta directametne a la base de datos
  68.         $this->debug = $debug;
  69.         $this->conn = @mysql_connect($this->servidor, $this->username, $this->password) or $this->error_mysql(mysql_error());
  70.         mysql_select_db($this->DBname) or $this->error_mysql(mysql_error());
  71.     }
  72. }
  73.  
  74. class query{
  75.     var $bd;//conexion mysql, requerido para llamar funciones de la classe bd
  76.     var $q; //query introducida
  77.     var $n;//numero de resultados
  78.     var $v;//los resultados en una tabla de objetos
  79.     var $a;//numero de filas afectadas por la query
  80.  
  81.     function query($query,$bd){
  82.         //constructor
  83.         $argcv = func_get_args();
  84.         call_user_func_array(array(&$this, '__construct'), $argcv);
  85.     }
  86.  
  87.     function __construct($query,$bd)
  88.     {
  89.     //ejecuta la query y rellena las propiedades del objeto
  90.         $this->q = $query;
  91.         $this->bd = $bd;
  92.         $mysql_result = @mysql_query($query) or $this->bd->error_mysql(mysql_error(),$query);
  93.         $this->n = @mysql_num_rows($mysql_result);
  94.         $this->a = @mysql_affected_rows();
  95.         if($this->n)
  96.             for($i=0;$i<$this->n;$i++) $taula[$i] = @mysql_fetch_object($mysql_result);
  97.         else $taula = null;
  98.         $this->v = $taula;
  99.         if(  $this->n > 0  ) mysql_free_result($mysql_result);
  100.     }
  101.    
  102. }
  103.  
  104. ?>

tengo este clase qe intendo qe pueda usarse con la clase para conectarme a la bd
escuche algo de extenderla lo implemente asi:
Código PHP:
Ver original
  1. <?php
  2. class user extends bd implements query{
  3.     function user($key, $id) {
  4.         $query = $this->query("select $key from usuarios WHERE id=$id", $this->bd());
  5.         foreach ($query->v as $fila)
  6.         return $fila->$key;
  7.     }
  8. }
  9. ?>
  10.  
  11. pero no se como hacer qe funcione .. aviso estoy empezando a usar clases
  12.  
  13. gracias de antemano :borracho: