Foros del Web » Programando para Internet » PHP » Frameworks y PHP orientado a objetos »

Recordset MySQL tratado con una tabla

Estas en el tema de Recordset MySQL tratado con una tabla en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Estimados El fin de semana me fui en la volada y se me ocurrio crear una especie de solución para un proyecto (que me hara ...
  #1 (permalink)  
Antiguo 14/07/2008, 11:41
 
Fecha de Ingreso: febrero-2005
Ubicación: Santiago - Chile
Mensajes: 8
Antigüedad: 19 años, 2 meses
Puntos: 0
Recordset MySQL tratado con una tabla

Estimados

El fin de semana me fui en la volada y se me ocurrio crear una especie de solución para un proyecto (que me hara millonario, xD) que estoy desarrollando, que me permita manejar la interacción con el servidor mysql.

Cree 4 clases las cuales me permiten, de forma facil e instuitiva, manejar las consultas SQL y los datos devueltos.

Las clases son:

db: Encargada de realizar la conexión al servidor y a la base de datos a utilizar, cuenta con las siguiente funciones:

  • connect(): Encargada de conectarse al servidor y de seleccionar la bd.
  • exeQry(): Encargada de ejecutar una SQL (comando o consulta), si la conexión se cerro la abre automaticamente.
  • getAffectedRows(): Devuelve el número de registros afectados por la última SQL.
  • getNumRows(): Devuelve el número de registros devueltos por la última consulta SQL.
  • isConnected(): Devuelve si esta o no conectado al servidor (true o false).
  • getError(): Devuelve el error devuelto por el motor mysql.
  • closeConnection(): Cierra la conexión actual.

table: Encargada de tratar el recordset como una simple tabla, se compone por:

  • load(): Encargada de cargar un recordset a la tabla.
  • getNumRows(): Devuelve el número de filas de la tabla.
  • getCellValueByPos(): Devuelve el valor de una celda definida por la posición de la fila y la posición de la celda.
  • getCellValueByName(): Devuelve el valor de una celda definida por la posición de la fila y el nombre de la celda.
  • getFirstRow(): Devuelve la primera fila de la tabla.
  • getNhtRow(): Devuelve la fila definida por su posición dentro de la tabla.
  • getLastRow(): Devuelve la última fila de la tabla.
  • getNextRow(): Devuelve la fila siguiente a la actual.
  • getPrevRow(): Devuelve la fila anterior a la actual.

row: Representa una fila dentro de una tabla, se compone por:

  • addCell(): Agrega una nueva celda a la fila.
  • getCellValueByName(): Devuelve el valor de una celda definida por su nombre.
  • getCellValueByPos(): Devuelve el valor de una celda definida por su posición.
  • getCellByName(): Devuelve la celda completa definida por su nombre.
  • getCellByPos(): Devuelve la celda completa definida por su posición.
  • getNumCells(): Devuelve el número de celdas que componen la fila.

cell: Representa una celda dentro de una fila de una tabla, se compone por:

  • getPosition(): Devuelve su posición dentro de una fila.
  • getName(): Devuelve su nombre (nombre de la columna a la que pertenece)
  • getValue(): Devuelve su valor.

NOTA: Estos objetos no contienen funciones adicionales como búsquedas y ordenamientos, una por que no se ( o no se me ocurre ahorita, xD) y otra por que no lo encuentro necesario ya que se pueden definir en la consulta SQL.

USO: Bueno la pregunta seria: ¿como la uso o como veo el cambio con mi aplicación actual?. Yo por lo menos la utilizo de la siguiente forma:

Consulta simple.

Código PHP:
//Creo el objeto
    
$mdb=new db();
    
//Llenar este datos es alternativo, se pueden dejar por defecto en la clase.
    
$mdb->host="localhost";        
    
$mdb->user="user";
    
$mdb->pass="passwd";
    
$mdb->dbname="midb";
    
    
//Alternativo, si solo se desea realizar comandos o consultas, no es necesario, ya que al ejecutar la SQL verifica si esta conectado, si no lo esta se conecta automaticamente, claro tendras que dejar por defecto los datos de conección.
    
$mdb->connect();
    
//Ejecuto un consulta SQL.
    
$mdb->exeQry("SELECT * FROM user WHERE UID=125");
    
//Cargo el recordset a mi nueva tabla.
    
$mtbl=new table($mdb->getResult());
    
//Cierro la conexión por que ya no la necesito.
    
$mDB->closeConnection();
    
//Puedo obtener la cantidad de registros recibidos.
    
if($tbl->getNumRows()==0){echo "No trajo nada!"; return false;}    
    
//Me posiciono en la primera fila
    
$perfil=$tbl->getFirstRow();
    
//Puedo recuperar el valor de la celda con el nombre de la columna de la tabla mysql.
    
echo "su nombre es: " $perfil->getCellValueByName('USER_NAME');
    
//Tambien se puede recuperar el valor de la celda con la posición dentro del registro devuelto.    
    
echo "su apellido es: " $perfil->getCellValueByPos(1);. 
Recorrido de registros

Código PHP:
//Creo el objeto
    
$mdb=new db();
    
//Llenar este datos es alternativo, se pueden dejar por defecto en la clase.
    
$mdb->host="localhost";        
    
$mdb->user="user";
    
$mdb->pass="passwd";
    
$mdb->dbname="midb";
    
    
//Alternativo, si solo se desea realizar comandos o consultas, no es necesario, ya que al ejecutar la SQL verifica si esta conectado, si no lo esta se conecta automaticamente, claro tendras que dejar por defecto los datos de conección.
    
$mdb->connect();
    
//Ejecuto un consulta SQL.
    
$mdb->exeQry("SELECT * FROM user WHERE CITY='Santiago'");
    
//Cargo el recordset a mi nueva tabla.
    
$mtbl=new table($mdb->getResult());
    
//Cierro la conexión por que ya no la necesito.
    
$mDB->closeConnection();
    
//Puedo obtener la cantidad de registros recibidos.
    
if($tbl->getNumRows()==0){echo "No trajo nada!"; return false;}    
    
//Puedo posicionarme en la primera fila como en la última
    
$perfil=$tbl->getFirstRow();    
    
//Se puede recorrer los datos con un while
    
while($perfil){
        
//Puedo recuperar el valor de la celda con el nombre de la columna de la tabla mysql.
        
echo "su nombre es: " $perfil->getCellValueByName('USER_NAME');
        
//Tambien se puede recuperar el valor de la celda con la posición dentro del registro devuelto.    
        
echo "su apellido es: " $perfil->getCellValueByPos(1);
        
//Puedo pasar a la siguiente fila como a la anterior
        
$perfil=$tbl->getNextRow();
    }
    
    
//Tambien puedo utilizar un for
    
for($i=0$i<=$tbl->getNumRows();$i++){
        
$perfil=$tbl->getNhtRow($i);
        
//Puedo recuperar el valor de la celda con el nombre de la columna de la tabla mysql.
        
echo "su nombre es: " $perfil->getCellValueByName('USER_NAME');
        
//Tambien se puede recuperar el valor de la celda con la posición dentro del registro devuelto.    
        
echo "su apellido es: " $perfil->getCellValueByPos(1);
        
//Puedo pasar a la siguiente fila
    
}
    
    
//Tambien puedo recorrer los datos sin tomar las filas
    
for($i=0$i<=$tbl->getNumRows();$i++){
        
//Puedo acceder automaticamente al valor de una celda en una fila x dando como parámetro la posición de la  fila y el nombre de la celda.
        
echo "su nombre es: " $tbl->getCellValueByName($i"USER_NAME");
        
//Puedo acceder automaticamente al valor de una celda en una fila x dando como parámetro la posición de la fila y de la celda.
        
echo "su apellido es: " $tb->getCellValueByPos($i1);
    } 
Ejecución de Comandos SQL.

Código PHP:
//Creo el objeto
    
$mdb=new db();
    
//Llenar este datos es alternativo, se pueden dejar por defecto en la clase.
    
$mdb->host="localhost";        
    
$mdb->user="user";
    
$mdb->pass="passwd";
    
$mdb->dbname="midb";
    
    
//Alternativo, si solo se desea realizar comandos o consultas, no es necesario, ya que al ejecutar la SQL verifica si esta conectado, si no lo esta se conecta automaticamente, claro tendras que dejar por defecto los datos de conección.
    
$mdb->connect();
    
//Ejecuto los comandos SQL.
    
$mdb->exeQry("INSERT INTO user(USER_NAME, USER_AGE, USER_EMAIL) VALUES ('Johnx', 23, '[email protected]'");
    
$mdb->exeQry("UPDATE user SET USER_NAME='John' WHERE USER_NAME='Johnx'");
    
$mdb->exeQry("DELETE FROM user WHERE USER_NAME='John'");
    
    
//Cierro la conexión.");
    
$mDB->closeConnection(); 
Pueden descargarlo desde aquí -> http://rapidshare.com/files/12967700...a.1.0.zip.html
o de aquí -> http://www.megaupload.com/es/?d=EITU68IW.


Espero les sirva.

Saludos

José Eduardo Ríos
kattatzu(a)gmail.com
  #2 (permalink)  
Antiguo 14/07/2008, 11:48
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: Recordset MySQL tratado con una tabla

Tema trasladado a PHP Orientado a Objetos.

Te recomiendo leer de patrónes de diseño ya que PHP tiene varias ventajas con la inclusión de SPL, y puedes hacer cosas más sencillas de lo que tu propones.

Saludos.
  #3 (permalink)  
Antiguo 14/07/2008, 11:56
 
Fecha de Ingreso: febrero-2005
Ubicación: Santiago - Chile
Mensajes: 8
Antigüedad: 19 años, 2 meses
Puntos: 0
Respuesta: Recordset MySQL tratado con una tabla

mmm ok, no he leido esos patrones que me pronuncias, los leere, ¿hay formas mas simples de hacer esto?, siempre que he buscado en internet como trabajar con php/mysql he encontrado el tipico while($row = mysql_fetch_array($rs)) y nunca he visto algo un poco más avanzado que eso, si lo ubiera encontrado no me ubiese dado la pega de hacer lo que hice.

xD

Saludos

PD: me podrias como se podria hacer mas simple?
  #4 (permalink)  
Antiguo 14/07/2008, 11:57
Avatar de enriqueplace  
Fecha de Ingreso: mayo-2005
Ubicación: Uruguay / Argentina
Mensajes: 1.102
Antigüedad: 19 años
Puntos: 32
Respuesta: Recordset MySQL tratado con una tabla

Pregunta constructiva: antes de intentar hacer un diseño de este tipo, tuviste la precaución de ver si no estaba hecho o resuelto de otra forma?
__________________
Blog phpsenior.com Cursos a Distancia surforce.com
  #5 (permalink)  
Antiguo 14/07/2008, 12:08
 
Fecha de Ingreso: febrero-2005
Ubicación: Santiago - Chile
Mensajes: 8
Antigüedad: 19 años, 2 meses
Puntos: 0
Respuesta: Recordset MySQL tratado con una tabla

mmm, nop, xD

No se me ocurrio buscar algo POO (mas encima lo hice le fin de semana y no tengo internet :( ).

Ahora revisando vi este post http://www.forosdelweb.com/f68/mysql-singleton-602296/ y se parece mas o menos a lo que hice, imagino que es mucho mejor que el mio, pero ahora que lo vi, me parecio mucho atado, en el post muestran que aplican herencias, sobrecargas y otras cosas y lo encuentro mucha pega, xD.

Saludos
  #6 (permalink)  
Antiguo 14/07/2008, 12:30
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: Recordset MySQL tratado con una tabla

Te recomiendo leer patrones básicos para lo que quieres, puedes empezar con Singleton, TableGateway y RowGateway, con ellos puedes ver lo básico.

Adicionalmente siempre piensa en la abstracción, te recomiendo usar el adaptador PDO, para tus consultas y así abstraes mucho la capa de datos.

Saludos.
  #7 (permalink)  
Antiguo 14/07/2008, 12:34
Avatar de destor77  
Fecha de Ingreso: noviembre-2004
Ubicación: Gálvez, Santa Fe, Argentina
Mensajes: 2.654
Antigüedad: 19 años, 6 meses
Puntos: 43
Respuesta: Recordset MySQL tratado con una tabla

el post que decis lo arme yo, era para ver si se podia hacer lo mismo que PDO pero solamente con mysql, más que nada para sitios que estan alojados en servidores con php4 (mal muy mal) y no soporta PDO, para PHP4 exiten muchas librerias una es ADODB (creo que asi era su nombre) fijate si esa te sirve, sino busca en phpclases.org que hay unas cuantas tambien.

salu2
  #8 (permalink)  
Antiguo 14/07/2008, 12:35
 
Fecha de Ingreso: febrero-2005
Ubicación: Santiago - Chile
Mensajes: 8
Antigüedad: 19 años, 2 meses
Puntos: 0
Respuesta: Recordset MySQL tratado con una tabla

Muchas gracias por sus recomendaciones, voy a leer más, aun que más tarde por que estoy contra el tiempo con este proyecto y no quiero detenerme mucho, despues sera cosas de crear una nueva versión y aplicar todo lo que aprenda, xD

Muchas gracias, no conocia este tema de patrones, me intereso mucho este -> http://web2development.blogspot.com/2007/05/patron-activetable-y-activerecord.html


Saludos

Jose Eduardo Rios

PD: Muy buen foro, gracias
  #9 (permalink)  
Antiguo 14/07/2008, 13:56
Avatar de enriqueplace  
Fecha de Ingreso: mayo-2005
Ubicación: Uruguay / Argentina
Mensajes: 1.102
Antigüedad: 19 años
Puntos: 32
Respuesta: Recordset MySQL tratado con una tabla

Estimado, justamente, si buscas antes de hacerlo a mano vas ahorrar tiempo, por ahí vienen las sugerencias y la idea de los patrones
__________________
Blog phpsenior.com Cursos a Distancia surforce.com
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:15.