Ver Mensaje Individual
  #23  
Antiguo 26-05-2006
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.142
Reputación: 36
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Mira cómo va quedando la cosa Román. He preparado una clase auxiliar para la clase "bdatos.class" que ya casi puedo decir que estamos haciendo...

Código PHP:
/**
 * 
 * @name InfoCampo
 * @access private
 * @package phpclasses
 * @version 0.1 26/5/2006
 * @author David Esperalta
 * @link mailto:[email protected]
 * 
 * @copyright 2006 David Esperalta
 * 
 */
class InfoCampo 
{
  
/**
   * Nombre del campo
   *
   * @var string
   * @access public
   */
  
var $nombre '';

  
/**
   * Nombre de la tabla
   *
   * @var string
   * @access public
   */  
  
var $tabla '';

  
/**
   * Valor por defecto
   *
   * @var string
   * @access public
   */    
  
var $porDefecto '';
  
  
/**
   * Máxima longitud
   *
   * @var integer
   * @access public
   */    
  
var $maxLogitud 0;

  
/**
   * ¿Admite valores nulos?
   *
   * @var integer
   * @access public
   */    
  
var $admiteNulos 0;

  
/**
   * ¿Es clave primaria?
   *
   * @var integer
   * @access public
   */    
  
var $esClavePrimaria 0;
  
  
/**
   * ¿Es clave única?
   *
   * @var integer
   * @access public
   */      
  
var $esClaveUnica 0;
  
  
/**
   * ¿Es clave múltiple?
   *
   * @var integer
   * @access public
   */      
  
var $esClaveMultiple 0;
  
  
/**
   * ¿Es de tipo numérico?
   *
   * @var integer
   * @access public
   */      
  
var $esNumerico 0;
  
  
/**
   * ¿Es de tipo "Blob"?
   *
   * @var integer
   * @access public
   */      
  
var $esBlob 0;

  
/**
   * Nombre del tipo
   *
   * @var string
   * @access public
   */      
  
var $tipo '';
  
  
/**
   * ¿Tiene signo?
   *
   * @var integer
   * @access public
   */      
  
var $sinSigno 0;
  
  
/**
   * ¿Se rellena con ceros?
   *
   * @var integer
   * @access public
   */
  
var $rellenoCeros 0;   
  
  
/**
   * Constructor de la clase
   *
   * El parámetro ha de ser un objeto del tipo
   * que devuelve la función "mysql_fech_field".
   * 
   * @param Object $datosCampo
   * @return InfoCampo
   * @access public
   */
  
function InfoCampo($datosCampo)
  {
    if(!isset(
$datosCampo))
      return 
null;
    
$this->CargarInfo($datosCampo);  
  }
  
  
/**
   * Traladamos las propiedades del objeto que
   * se pasa como parámetro a este propio objeto.
   * 
   * En realidad, como puede verse, lo único que
   * hacemos es "traducir" las propiedades del in-
   * glés al español.
   *
   * @param Object $datosCampo
   * @access private
   */
  
function CargarInfo($datosCampo)
  {
    
$this->nombre          $datosCampo->name;
    
$this->tabla           $datosCampo->table;
    
$this->porDefecto      $datosCampo->def;
    
$this->maxLogitud      $datosCampo->max_length;
    
$this->admiteNulos     $datosCampo->not_null;
    
$this->esClavePrimaria $datosCampo->primary_key;
    
$this->esClaveUnica    $datosCampo->unique_key;
    
$this->esClaveMultiple $datosCampo->multiple_key;
    
$this->esNumerico      $datosCampo->numeric;
    
$this->esBlob          $datosCampo->blob;
    
$this->tipo            $datosCampo->type;
    
$this->sinSigno        $datosCampo->unsigned;
    
$this->rellenoCeros    $datosCampo->zerofill;
  }

// class InfoCampo 
Como puede verse la clase no sirve para mucho... todavía dudo de su utilidad, pero, en todo caso, está pensada (es un decir) para utilizarse en el nuevo método "Campos" de la clase "bdatos.class", tal que así:

Código PHP:
  /**
   * Devuelve información acerca de los campos de una
   * determinada tabla de la base de datos. El resul-
   * tado de este método puede consistir en un Array
   * de Objetos, un Array de Arrays asociativos o un
   * Array de Arrays numéricos.
   * 
   * @param string $tabla Nombre de la tabla
   * @return mixed array
   * @access public
   */
  
function Campos($tabla$tipoSalida TS_OBJETO
  {
    
// Comprobamos que se especifica una tabla
    
if(!isset($tabla) || $tabla == '')
      return 
false;
    
    
// Preparamos el resultado
    
$resultadoMetodo   = array();    
           
    
/* Nótese lo "mágico" de la consulta.
       (Gracias Román ;)
    */
    
$sql "SELECT * FROM $tabla WHERE 0 = 1";
    
    
/* ¿Porqué no utilizamos el método Consulta conque cuenta
       esta misma clase para obtener los resultados? La razón
       está en que el método Consulta no devuelve un "recurso"
       como lo hace "mysql_query", así que no podríamos luego
       utilizar el resultado más abajo, como se verá.
    */
    
$resultadoConsulta = @mysql_query($sql$this->enlaceConexionBd);
        
    
// ¿Algún error en la sala?
        
if(@mysql_error($this->enlaceConexionBd))
        {
            
$this->Error(@mysql_error($this->enlaceConexionBd));
            return 
false;
        }              

        
/* Es aquí donde necesitamos un resultado como el que nos
           devuelve la función "mysql_query", para utilizarlo en
           la función "mysql_fetch_field".
        */
    
while ($datosCampo = @mysql_fetch_field($resultadoConsulta)) 
    {            
      
/* Esto puede ser un poco estúpido. Lo único que
         nos ofrece la clase "InfoCampo" es un objeto
         cuyas propiedades son las mismas que el objeto
         que ahora contiene "$datosCampo". La diferencia
         está en que en el objeto "InfoCampo" sus propie-
         dades están en español. ¿Será esto útil?           
      */
      
$infoCampo = new InfoCampo($datosCampo);
      
      
/* A continuación toca mirar por el tipo de salida
         que se precisa, por defecto un Array de objetos,
         como en el resto de métodos de esta clase que
         devuelven datos.
      */
      
switch ($tipoSalida
      {
          case 
TS_ARRAY_ASOCIATIVO:
              
$resultadoMetodo[] = get_object_vars($infoCampo);
              break;
        case 
TS_ARRAY_NUMERICO:
          
$resultadoMetodo[] = array_values(get_object_vars($infoCampo));
          break;
          case 
TS_OBJETO:
          default:
            
$resultadoMetodo[] = $infoCampo;
            break;
      }
    }
     
    
// Liberamos los resultados de la consulta
    
@mysql_free_result($resultadoConsulta);   
       
    
// Y devolvemos el resultado del método
    
return $resultadoMetodo;     
  } 
Todo esto se puede ver funcionando en una nueva versión de la clase "bdatos.class" que acabo de actualizar. He hecho también algunos otros cambios que se detallan en el archivo "historial.txt". Para quien le interese, la clase puede descargarse desde aquí, mirar en el apartado "Código PHP".
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita