Ver Mensaje Individual
  #6 (permalink)  
Antiguo 02/01/2008, 00:37
Computer XTress
 
Fecha de Ingreso: diciembre-2004
Mensajes: 721
Antigüedad: 19 años, 4 meses
Puntos: 2
Re: Ayuda con mi modelo de objetos

Y aquí dejo algunas clases (que no son robadas de internet. Si me sirvieron de influencia algunas que encontré, obviamente)



CONEXION A BD

Código PHP:
class mysqldb_conexion {

    
/* SERVER LOGIN */
    
var $BaseDatos;
    var 
$Servidor;
    var 
$Usuario;
    var 
$Clave;

 
    
/* ID de CONEXION */
    
var $Conexion_ID 0;


    
/* ERROR STRING */
    
var $error;


    
/******************************************************************************
     *                                                                              *
     *                                METODOS                                          *
     *                                                                              *
     ******************************************************************************/


    /**************************************************************** CONSTRUCTOR */

    
function mysqldb_conexion($bd) {

        
// Si NO llega un array de datos, veo si es un archivo.
        
if ( !is_array($bd) ) {

            
// Si me pasan un archivo de configuración alternativo, controlo que exista.
            
if ($bd != NULL && !file_exists($bd)) {
                
$this->error("[<b>mysqldb_conexion</b>] Error al construir objeto: El archivo de conexion (".$config_file.") no existe.");
                return 
false;

            } else {

                include_once(
$bd);
            }
        }
        
        
// Cargo la configuración del servidor MySQL
        
$this->BaseDatos $bd['0'];
        
$this->Servidor $bd['1'];
        
$this->Usuario $bd['2'];
        
$this->Clave $bd['3'];
    }


    
/**************************************************************** DESSTRUCTOR */

    
function destroy() {

        
// Nos aseguramos de haber cerrado la conexión a la BD
        
$this->cerrar();

        
// 'destruimos' el objeto
        
settype(&$this'null');
    }


    
/*
     * Un metodo simple para mostrar errores al usuario. Si no recibe argumento, 
     * simplemente muestra el contenido de $this->error. Caso contrario, carga 
     * $this->error con un string.
     *
      ******************************************************************************/

    
function error() {

        switch (
func_num_args()) {

            case 
1:
                
$this->error func_get_arg(0);
            break;

            default:
                return 
$this->error;
            break;
        }
    }


    
/*
     * Metodo para conectarse a la Base de Datos.
     * Devolvera "false" si la conexión falla por alguna razón, y guardará un 
     * mensaje de error en $this->error, el que puede ser mostrado con 
     * $this->error()
     *
      ******************************************************************************/

    
function conectar(){

        
// Si ya existe una conexión abierta al intentar conectar, la cerramos.
        
if ($this->Conexion_ID != "0") {
            
$this->error("[<b>mysqldb_conexion</b>] Error al conectar a la Base de Datos: Ya existe una conexión activa, cierrela antes de volver a conectar.");
            return 
false;
        }
        
        
// Conectamos al servidor
        
if ( !($this->Conexion_ID = @mysql_connect($this->Servidor$this->Usuario$this->Clave)) ) {
            
$this->error("[<b>mysqldb_conexion</b>] Error al conectar a la Base de Datos:<br/> MySQL: [".mysql_errno()."] ".mysql_error()."<br/>");
            return 
false;
         }

        
// Seleccionamos la base de datos
        
if ( !(mysql_select_db($this->BaseDatos$this->Conexion_ID)) ) {
            
$this->error("[<b>mysqldb_conexion</b>] Error al conectar a la Base de Datos:<br/>MySQL: [".mysql_errno()."] ".mysql_error()."<br/>");
            return 
false;
        }

         
// Si todo salió bien, retornamos el ID de conexión (lo que antes usabamos como $link)
        
return $this->Conexion_ID;
    }

 

    
/*
     * Cerrr la conexion a la BD.
     *
      ******************************************************************************/

    
function cerrar() {
        if ( !(
mysql_close($this->Conexion_ID)) ) {
            
$this->error("[<b>mysqldb_conexion</b>] Error al cerrar conexión:<br/>MySQL: [".mysql_errno()."] ".mysql_error()."<br/>");
            return 
false;
        }

        return 
true;
    }

// FIN de la clase 



CONSULTAS A LA BD

Código PHP:

<?php

class mysqldb_consulta {

    
/* Variables asociadas a consultas */
    
var $Consulta_ID;
    var 
$conexion;


    
/* Flag para limpiar automaticamente los resultados cuando sea necesario */
    
var $qflag 0;


    
/* String para almacenar mensajes de error */
    
var $error;


    
/******************************************************************************
     *                                                                              *
     *                                METODOS                                          *
     *                                                                              *
     ******************************************************************************/


    /**************************************************************** CONSTRUCTOR */

    /*
     * Recibimos una referencia hacia un objeto mysqldb_conexion.
     *
     ******************************************************************************/

    
function mysqldb_consulta(&$conexion) {
        if (
$conexion != "") { $this->conexion = &$conexion; }
    }

    
/**************************************************************** DESSTRUCTOR */
    
function destroy() {

        
// Nos aseguramos de limpiar la memoria utilizada para almacenar recordsets
        
$this->free();

        
// 'destruimos' el objeto
        
settype(&$this'null');
    }



    
/************************************** RECIBIR / CARGAR VARIABLES "GLOBALES" */

    /*
     * Un metodo simple para mostrar errores al usuario. Si no recibe argumento, 
     * simplemente muestra el contenido de $this->error. Caso contrario, carga 
     * $this->error con un string.
     *
      ******************************************************************************/

    
function error() {

        switch (
func_num_args()) {

            case 
1:
                
$this->error func_get_arg(0);
            break;

            default:
                return 
$this->error;
            break;
        }
    }


    
/*
     * Este metodo accede a $this->Consulta_ID:
     *
     * A. Retorna el identificador de consulta si se pasa un comando de consulta
     *    como argumento y esta se realiza satisfactoriamente. Si la consulta 
     *    no se realiza satisfactoriamente devolverá "false".
     *
     * B. Retorna el identificador de consulta si no se le pasan argumentos.
     *
      ******************************************************************************/

    
function goquery() {

        switch (
func_num_args()) {

            case 
1:
                
$this->Consulta_ID func_get_arg(0);

                if(!
$this->Consulta_ID) {
                    return 
false;
                }

                return 
true;
                break;

            default:
                return 
$this->Consulta_ID;
            break;
        }
    }


    
/*
     * Realizamos un query a la base de datos. Devolvemos "false" y cargamos un 
     * mensaje de error si la consulta no se realizó satisfactoriamente.
     *
     * Si la consulta se realiza de forma satisfactoria devuelve "true".
     *
      ******************************************************************************/

    
function consulta($sql) {

        if (
$this->conexion->Conexion_ID == 0) {
            
$this->error("[<b>mysqldb_consulta</b>] Imposible realizar consulta, no se ha establecido aún una conexión MySQL.<br/>");
            return 
false;
        }

        
// SI la consulta es de tipo SELECT y QFLAG está levantado, limpiamos
        // la memoria de la consulta anterior.

        
if ( strtolower(substr($sql,0,6)) == "select") {

            if (
$this->qflag == 1) {
                @
mysql_free_result($this->Consulta_ID);
                
$this->qflag 0;

            } else {

                
$this->qflag 1;
            }
        }


        if ( !(
$this->goquery(@mysql_query($sql$this->conexion->Conexion_ID)))) {
            
$this->error("[<b>mysqldb_consulta</b>] Error al ejecutar SQL:<br/>MySQL : ".mysql_error()."<br/>");
            return 
false;
        }

        return 
true;
    }


    
/*
     * Devuelve el la cantidad de registros afectados por un update
     *
      ******************************************************************************/
    
function affected() {
    
        switch (
func_num_args()) {

            case 
1:
                
$this->affected func_get_arg(0);
                break;

            default:
                return 
$this->affected;
            break;
        }
    }


    
/*
     * Devuelve el nombre de un campo de una consulta 
     *
      ******************************************************************************/

    
function nombrecampo($numcampo) {
        return 
mysql_field_name($this->Consulta_ID$numcampo);
    }


    
/*
     * Devuelve el número de campos de una consulta
     *
      ******************************************************************************/

    
function numcampos() {
        return 
mysql_num_fields($this->Consulta_ID);
    }


    
/*
     * Devuelve el número de registros de una consulta 
     *
      ******************************************************************************/

    
function numrows() {
        return 
mysql_num_rows($this->Consulta_ID);
    }


    
/*
     * Devuelve un array con los registros obtenidos
     *
      ******************************************************************************/

    
function get_array() {
        return 
mysql_fetch_array($this->Consulta_IDMYSQL_ASSOC);
    }


    
/*
     * Muestra una tabla con los resultados de la consulta.
     *
     * Este método está pensado solo para testear resultados de consultas.
     *
      ******************************************************************************/

    
function debug_results() {
        echo 
"<table border=1>\n
            <tr>"
;
 

        
// mostramos los nombres de los campos
        
for ($i 0$i $this->numcampos(); $i++){
            echo 
"<td><b>".$this->nombrecampo($i)."</b></td>\n";
        }

        echo 
"</tr>\n";
        
// mostrarmos los registros

         
while ($row mysql_fetch_row($this->Consulta_ID)) {

            echo 
"<tr> \n";

            for (
$i 0$i $this->numcampos(); $i++){
                echo 
"<td>".$row[$i]."</td>\n";
            }

            echo 
"</tr>\n
            </table>"
;
        }
    }


    
/*
     * Mueve el índice del identificador de query al siguiente registro.
     *
      ******************************************************************************/

    
function seek($indice) {

        if ( !(
mysql_data_seek($this->Consulta_ID$indice))) {
            
$this->error("[<b>mysqldb_consulta</b>] Error al intentar mover índice:<br/>MySQL: <b>[".mysql_errno()."]</b> ".mysql_error()."<br/>");
            return 
false;
        }

        return 
true;
    }


    
/*
     * Limpiamos los resultados de una consulta
     *
      ******************************************************************************/

    
function free() {

        if (
qflag == 1) {

            if (! (@
mysql_free_result($this->Consulta_ID))) {
                
$this->error("[<b>mysqldb_consulta</b>]Error liberando identificador:<br/>MySQL: <b>[".mysql_errno()."]</b> ".mysql_error()."<br/>");
                return 
false;
            }

            
$this->qflag 0;

            return 
true;
        }
    }

// FIN CLASE

?>