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

Les Comparto esta Clase para Guardar

Estas en el tema de Les Comparto esta Clase para Guardar en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Hola, les comparto esta clase para guardar en PostgreSql, puede guardar a cualquier base de datos, cualquier tabla, borrar y modificar. Aqui les dejo el ...
  #1 (permalink)  
Antiguo 13/08/2009, 16:05
Avatar de cesarpi80  
Fecha de Ingreso: mayo-2009
Mensajes: 159
Antigüedad: 15 años
Puntos: 10
De acuerdo Les Comparto esta Clase para Guardar

Hola, les comparto esta clase para guardar en PostgreSql, puede guardar a cualquier base de datos, cualquier tabla, borrar y modificar. Aqui les dejo el código (conste en ese momento busque algo así y no lo encontré, fue hace 3 años).

Clase BaseDatos esta va a ser llamada por nuestro programa que gestionará la operación correspondiente.

Código PHP:
<?php
/*
Programador: cesarpi80
programa: funciones.php
Managua - Nicaragua 2006

*/
class BaseDatos

var 
$sql2=" ";
var 
$sentencia;
var 
$tabla;
var 
$conexion;

//Conexion y tabla
function parametros($conexion,$tabla)
{
    
$this->conexion $conexion;
    
$this->tabla $tabla;
}

//Guardando los datos
function guardar() 
{
       
$numargs func_num_args();
       for (
$i 0;$i $numargs;$i++)
       {
          
$arr1[$i] = func_get_arg($i);
       }      
        
$sentencia "";
        
$i count($arr1);
        for (
$j=0;$j<$i;$j++) 
        {
            
$sentencia .="'";
            
$sentencia .=$arr1[$j];
            
$sentencia .="'";
            if (
$j <> ($i-1)){
                
$sentencia .=",";}
        }
        if (
$this->sql2 ==" ") {
            
$sql "insert into $this->tabla values ($sentencia)";
           } else {
                   
$sql "insert into $this->tabla ($this->sql2) values ($sentencia)";
              }
       
        
$resultado pg_query($this->conexion,$sql);
 }
 
function 
Campos()
{
         
$numargs func_num_args();
           for (
$i 0;$i $numargs;$i++)
       {
          
$arr1[$i] = func_get_arg($i);
       }
       
       
$sentencia "";
    
$i count($arr1);
    for (
$j=0;$j<$i;$j++) 
    {        
        
$sentencia .=$arr1[$j];
         if (
$j <> ($i-1)){
            
$sentencia .=",";}
    }
    
$this->sql2 $sentencia;
}

//Borrar de la base de datos

    
function Borrar() 
    {
        
$numargs func_num_args();
           for (
$i 0;$i $numargs;$i++)
       {
          
$arr1[$i] = func_get_arg($i);
       }
          
$sentencia "";
        
$i count($arr1);
        for (
$j=0;$j<$i;$j++) 
        {        
            if ((
$j 2)==0) {
              
$sentencia .=$arr1[$j];
             } else
             {
              
$sentencia .=" = '";
              
$sentencia .=$arr1[$j];
              
$sentencia .="'";
               if (
$j <> ($i-1)){
                
$sentencia .=" and ";}
             }
            
        }    
        
$sql "delete from $this->tabla where $sentencia";
        
$resultado pg_query($this->conexion,$sql);
    }
    
    function 
Criterio()
    {
        
$numargs func_num_args();
           for (
$i 0;$i $numargs;$i++)
       {
          
$arr1[$i] = func_get_arg($i);
       }
          
$sentencia "";
        
$i count($arr1);
        for (
$j=0;$j<$i;$j++) 
        {        
            if ((
$j 2)==0) {
              
$sentencia .=$arr1[$j];
             } else
             {
              
$sentencia .=" = '";
              
$sentencia .=$arr1[$j];
              
$sentencia .="'";
               if (
$j <> ($i-1)){
                
$sentencia .=" and ";}
             }        
        }    
        
$this->sentencia $sentencia;
    }
    
    

    function 
Actualizar()
    {
        
$numargs func_num_args();
           for (
$i 0;$i $numargs;$i++)
       {
          
$arr1[$i] = func_get_arg($i);
       }
          
$sentencia "";
        
$i count($arr1);
        for (
$j=0;$j<$i;$j++) 
        {        
            if ((
$j 2)==0) {
              
$sentencia .=$arr1[$j];
             } else
             {
              
$sentencia .=" = '";
              
$sentencia .=$arr1[$j];
              
$sentencia .="'";
               if (
$j <> ($i-1)){
                
$sentencia .=",";}
             }        
        }    
        
        
$sql3 "update $this->tabla set $sentencia where $this->sentencia";
        echo 
$sql3;
        
$resultado pg_query($this->conexion,$sql3);
    }

//Fin de la Clase
?>
Un ejemplo sencillo del llamado es este programa:

Código PHP:
<?php
include ("funciones.php");
include (
"conexion.php");

$ruc "694";
$apellido1 "Morientes";
$apellido2 "Owen";

//Conexion a la base de datos
$conexion conectar();

//Creación del Objeto y de sus parametros
 
$base = new BaseDatos;
 
$base->parametros($conexion,"dgi_ruc_natural");
 
 
/*Guardar en campos específicos, si se va a guardar en unos cuantos campos
   se manda a llamar Campos(campo1,campo2,...,campon), 
   donde se le pasa el nombre de los campos a accesar
   Guardar(valor1,valor2,...,valor3)*/
 
  
$base->Campos("ruc","nombre_1apell","nombre_2apell");
  
$base->guardar($ruc,$apellido1,$apellido2);
 
 
/* 
 Si se va a Guardar directamente en todos los campos solo hacemos el llamado a guardar(campos);
 */
 /*Borrar de la base de datos, parametros pasados, nombre del campo a buscar
   Y el valor a buscar en la base de datos, pueden ser cuantos uno quiera.
   Borrar(campo1,valor1,campo2,valor2,...,valorn,campon)*/
 //$base->parametros($conexion,"dgi_ruc_juridica");
 //$base->Borrar("ruc","230704902");
 
 /*Actualizar en la base de datos Criterio(campo1,valor1,campo2,valor2, ... , campon,valorn)
  * Actualizar(campo1,valor1,campo2,valor2, ... , campon,valorn)
  */
  
 //$base->Criterio("ruc",$ruc);
 //$base->Actualizar("nombre_nombre","Michael");
 
?>
Donde conexiones.php es su archivo de conexion a la base de datos, cabe recalcar que este es un ejemplo muy sencillo, en las aplicaciones que he realizados implementando esta clase, un tips bien importante es manejar dos arreglos que pasan por parametros al programa gestor del guardado, borrado o modificacion, todos en uno solo, en esos arreglos van los valores y campos. No se si me explico, cualquier duda a la orden.

Y espero que les pueda servir de algo, como me ha servido a mi bastante.

PD: Para usarla en MySql solo se cambian las funciones pg por mysql.
__________________
Tratando de aprender lo mas que se pueda !!!
  #2 (permalink)  
Antiguo 13/08/2009, 18:46
Avatar de zfStuden  
Fecha de Ingreso: abril-2009
Mensajes: 109
Antigüedad: 15 años
Puntos: 0
Respuesta: Les Comparto esta Clase para Guardar

exelente aporte gracias
  #3 (permalink)  
Antiguo 13/08/2009, 19:25
Avatar de Snaft_J1  
Fecha de Ingreso: diciembre-2006
Mensajes: 285
Antigüedad: 17 años, 5 meses
Puntos: 8
Respuesta: Les Comparto esta Clase para Guardar

Chevere, felicitaciones compañero.

saludos....
__________________
-= El conocimiento y el saber te hacen un ser libre =-
Ando en busca de conocimiento....
  #4 (permalink)  
Antiguo 13/08/2009, 21:27
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: Les Comparto esta Clase para Guardar

creo que si quieres que sea realmente un buen aporte, deberías hacer todo en POO, ya que ahí estas mezclando programación estructurada con programación estilo OO.

Te recomiendo como tip, que no mezcles ambas ya que luego es más complicado el mantenimiento de una aplicación hibrida.

Saludos.
  #5 (permalink)  
Antiguo 14/08/2009, 06:30
Avatar de cesarpi80  
Fecha de Ingreso: mayo-2009
Mensajes: 159
Antigüedad: 15 años
Puntos: 10
Respuesta: Les Comparto esta Clase para Guardar

@GatorV, Gracias esa es la idea, obviamente es criterio personal de cada programador como manejar las estructuras de datos en sus programas. En mi caso personal me declaro un programador desordenado, defecto que espero corregir en un futuro :).

PD: Por cierto talvez y la modificas y pones tu version completamente en POO. Salu2.
__________________
Tratando de aprender lo mas que se pueda !!!
  #6 (permalink)  
Antiguo 14/08/2009, 08:50
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: Les Comparto esta Clase para Guardar

No veo el caso re-inventar la rueda antes sí tenía una clase para DB, pero ahora uso Zend_Db (PDO) solamente por todos los beneficios que me da (como abstracción del adaptador) y aparte es POO 100%

Saludos.
  #7 (permalink)  
Antiguo 14/08/2009, 11:34
Avatar de cesarpi80  
Fecha de Ingreso: mayo-2009
Mensajes: 159
Antigüedad: 15 años
Puntos: 10
Respuesta: Les Comparto esta Clase para Guardar

Ok me declaro Culpable, lo siento mucho por no usar la clase Zend_Db .... :)

Aclaracion General:

Primero: Yo ocupo una variante de esa clase en al menos 4 o 5 sistemas webs que he desarrollado a los cuales les doy mantenimiento. Nunca me ha fallado y me evito el grandisimo problema de tener muchos archivos de Guardar, Modificar y borrar, por el contrario tengo un solo archivo que hace las tres operaciones, asi que mi dolor de cabeza se termina a la hora del MANTENIMIENTO (Por ahi dijeron que era un problema).

Segundo: No me gusta la polémica, al contrario siempre he sido alguien abierto a sugerencias y críticas que aporten para poder crecer, asi que tu sugerencia de usar Zend_Db la voy a tener muy en cuenta para futuros proyectos, y estoy seguro que te lo voy a agradecer luego.

Tercero: Zend Framework 0.1.3 Preview Release 2006-04-18 Esta es la fecha de la primer liberacion del Zend Framework, aclare al inicio el tiempo en que programe la Clase, hace 3 años, busque algo para facilitarme el trabajo y no lo encontré, y claro INVENTE LA RUEDA aunque me apena no haberte conocido antes para evitarme inventar cosas "innecesarias"

Cuarto: En virtud de que eres moderador y aparentemente un Dios de la Programación, te propongo que elimines este mensaje, el anterior tuyo y dejemos que la gente vea la clasesita aunque sea para reirse un rato de un loco que inventa la Rueda para carreta cuando existen aviones. Salu2.
__________________
Tratando de aprender lo mas que se pueda !!!
  #8 (permalink)  
Antiguo 14/08/2009, 13:41
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: Les Comparto esta Clase para Guardar

Mi comentario iba a esto:
Cita:
Iniciado por cesarpi80 Ver Mensaje
PD: Por cierto talvez y la modificas y pones tu version completamente en POO. Salu2.
A eso me referia con re-inventar la rueda, no era para atacarte a tí ni tu clase, es simplemente que ya no uso cosas como esta al estar apegado a un estandar (por trabajo más que nada).

Mi comentario en general iba a tu uso de diferentes tipos de programación en la misma parte, es donde rompe el mantenimiento y la extensibilidad, pero no es para que lo tomes como ataque.

PD. PDO tiene disponible desde PHP5, o sea hace mucho, y antes de eso existian más clases como ADODB, o PEAR::DB .
PD2. No me considero un dios de la programación ni mucho menos, pero sí soy moderador y recuerda que este foro es para discusiones, así que no veo la razón de borrar los mensajes.

Saludos y éxito
  #9 (permalink)  
Antiguo 14/08/2009, 14:35
Avatar de cesarpi80  
Fecha de Ingreso: mayo-2009
Mensajes: 159
Antigüedad: 15 años
Puntos: 10
Respuesta: Les Comparto esta Clase para Guardar

Solo comentaba nada mas, y entiendo tu punto y te doy la razon, me he aclarado.
__________________
Tratando de aprender lo mas que se pueda !!!
  #10 (permalink)  
Antiguo 24/08/2009, 22:18
Avatar de enriqueplace  
Fecha de Ingreso: mayo-2005
Ubicación: Uruguay / Argentina
Mensajes: 1.102
Antigüedad: 19 años
Puntos: 32
De acuerdo Respuesta: Les Comparto esta Clase para Guardar

Detalles a tener en cuenta:
  1. Sigue el estándar de codificación definido por la empresa Zend
  2. Cambia "var" de PHP4 por public / protected / private de PHP5
  3. Evita atributos public, cámbialos a protected y private
  4. Todas las funciones, aunque sean por defecto, deben empezar con public
  5. Busca sobre PHPDoc, usar /** */ al inicio de clases y métodos
  6. Abstrae el motor de bases de datos de la lógica de la clase, así será intercambiable por cualquier motor (investiga sobre polimorfismo).
Mis 2c...
__________________
Blog phpsenior.com Cursos a Distancia surforce.com
  #11 (permalink)  
Antiguo 25/08/2009, 10:29
 
Fecha de Ingreso: agosto-2009
Mensajes: 247
Antigüedad: 14 años, 8 meses
Puntos: 10
Respuesta: Les Comparto esta Clase para Guardar

Cita:
Abstrae el motor de bases de datos de la lógica de la clase, así será intercambiable por cualquier motor (investiga sobre polimorfismo).
Perdon que me meta... pero como se hace para saber que metodos estan implementados para acceder a la DB si estan implementados por otra clase ?
  #12 (permalink)  
Antiguo 25/08/2009, 11:27
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: Les Comparto esta Clase para Guardar

Usa una interface para eso, con eso garantizas que todas las clases que implementen la interfaz tengan esos métodos definidos.

Saludos.
  #13 (permalink)  
Antiguo 26/08/2009, 06:44
Avatar de enriqueplace  
Fecha de Ingreso: mayo-2005
Ubicación: Uruguay / Argentina
Mensajes: 1.102
Antigüedad: 19 años
Puntos: 32
Respuesta: Les Comparto esta Clase para Guardar

Esa fue mi sugerencia, bigwhite, que busques información sobre polimorfismo, ahí está la respuesta

Es un concepto base para la POO y no es tan complicado como parece, pero así puedes hacer diseños "abiertos / cerrados" que te permiten extender el funcionamiento de tu sistema con un menor costo.
__________________
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 05:04.