Foros del Web » Programando para Internet » PHP »

Abstracción de BD

Estas en el tema de Abstracción de BD en el foro de PHP en Foros del Web. Hola, quieto probar esto de la abstracción de base de datos, y me gustaria saber vuestros consejos para decidir por qual es la mejor. 1. ...
  #1 (permalink)  
Antiguo 19/02/2004, 22:22
 
Fecha de Ingreso: enero-2004
Mensajes: 235
Antigüedad: 13 años, 11 meses
Puntos: 0
Abstracción de BD

Hola, quieto probar esto de la abstracción de base de datos, y me gustaria saber vuestros consejos para decidir por qual es la mejor.

1. Pear:DB
2. AdoDB

No conozco ninguna mas..


Un saludo.

Última edición por jmaribau; 19/02/2004 a las 22:51
  #2 (permalink)  
Antiguo 20/02/2004, 06:26
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Las que has citado son las más famosas ..

ADOdb es de las más completas .. incluso está en versión "extensión" para PHP (ademas de como classe por si no pudieras intalar la versión extensión en tu servidor)

PEAR:DB .. no maneja tantas BD como ADOdb .. pero si en tu servidor tienes instalado el paquete PEAR por defecto .. podrás ahorrar recursos usando estas classes comunes.

Además de esas que son las más completas y famosas tienes muchas más .. no tan completas tal vez pero que tal vez te acomoden para algún proyecto concreto que no requiera de tantas funcionalidades como las anteriores .. o simplemente para aprender a manejarte con ese tipo de classes de abstracción de BD.

Ejemplo (la suelo usar amenudo):

ezSQL:
http://ezsql.justinvincent.com/

Y muchas más por:
www.phpclasses.org

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #3 (permalink)  
Antiguo 20/02/2004, 07:04
 
Fecha de Ingreso: enero-2004
Mensajes: 235
Antigüedad: 13 años, 11 meses
Puntos: 0
Pq usas ezSQL en particular? Que te aporta este que no lo hagan los otros?

An algun otro mensaje comentas que usas Adodb, pq cambiaste?

Última edición por jmaribau; 20/02/2004 a las 07:22
  #4 (permalink)  
Antiguo 20/02/2004, 07:45
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
ADOdb .. la suelo recomendar .. la he "probado" a nivel básico ..pero no la suelo usar habitualmente.

La recomiendo por qué es más standar (popular) y puede funcionar como extensión (esto es una de las cosas que marca más la diferencia con respecto a otras capas de abstracción). Tal vez si trabajas en una empresa bajo un grupo de programadores .. por "standarizar" te obliguen a usar ADOdb por ejemplo .. pese que tu digas o te sientas mas comodo usar X capa de abstraccion de bd (lo mismo pasa con los motores de templates .. es bueno conocer Smarty como "standar" .. pero no es el único .. yo por ejemplo uso NokTemplate .. pero hay que conocer los otros ..)

En mi caso particular suelo trabajar con Msyql 99.9% de veces y rara vez hago algo en PostgreSQL .. y por "probar" algo en Access (por ODBC).

La classe ezSQL tiene como filosofía trabajar en "módulos" .. Si vas a usar Mysql .. cargas el módulo de Msyql .. si vas a usar PostgreSQL cargas ese módulo .. (como módulo me refiero a que lo trata como "archivos externos" completamente ..) así sólo tienes el código justo para lo que vas hacer .. (en todo momento puedes usar tu lógica común de condicionales para cargar uno o otro "módulo")

La classe en sí es más simple en funciones ... justo las que suelo usar y me agradan los métodos que emplea por su forma de uso. (sobre gustos no hay nada escrito). Recientemente el creador de esta capa de asbtracción sacó otra classe para paginado que enlaza perfectamente con su classe de abstracción (todavía no la he usado por qué usaba otras classes de paginado... pero podría ser buena combinación ..).

(esa classe si lees la página oficial hace una comparativa de "uso" entre algo igual hecho con ADOdb y ezSQL .. Por supuesto que "barre para casa" .. así que no es imparcial .. pero si ves los ejemplos saca tus conclusiones)

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #5 (permalink)  
Antiguo 20/02/2004, 07:54
 
Fecha de Ingreso: enero-2004
Mensajes: 235
Antigüedad: 13 años, 11 meses
Puntos: 0
Me lo he estado mirando, y no me acaba de convencer, ya que que se trata de hacer una capa encima de la capa de la abstracción a la base de datos.

<?php

mysql_connect("localhost", "mysql_user", "mysql_password")
or
die("could not connect");

mysql_select_db("mydb");

$result = mysql_query("SELECT count(*) FROM users");

$row = mysql_fetch_array($result);

$num_users = $row[0];

mysql_free_result($result);

$result = mysql_query("SELECT name FROM users LIMIT rand(0, $num_users-1) ,1");

$row = mysql_fetch_object($result);

mysql_free_result($result);

echo $row->name;
?>
Now, let's do exactly the same thing using our new class:
<?php


include_once "ez_sql.php";

$name = $db->get_var("SELECT name FROM users LIMIT ".rand(0,$db->get_var("SELECT count(*) FROM users")-1).",1");

echo $name;

?>

Yo tambien te lo monto en 3 linias si quieres:

include_once "config_bd_sql.php";

$row = mysql_fetch_object(mysql_query("SELECT name FROM users LIMIT rand(0, mysql_get_var(mysql_query("SELECT count(*) FROM users");)-1 ,1");;
echo $row->name;
  #6 (permalink)  
Antiguo 20/02/2004, 08:04
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Pues entonces .. que buscas?

La "capa" no es sólo "cambiar" de nombre las funciones nativas para de la BD que uses .. sino de Poder usar UNA misma programación e incluso SQL para X base de datos que puedas usar o cambiarte en cualquier momento sin tocar una línea de tu código PHP y seguramente (depende del "salto" que hagas) en tus sentencias SQL ..

Esa es la "grácia" de una capa de abstracción de Base de datos .. no el de cambiar por cambiar nombres .. Usas un mombre comun de un método para hacer una consulta .. ejemplo: $db->hazconsulta($sql) .. y dará igual si usas Msyql o en un rato te cambias a PostgreSQL por qué las necesidades del motor de BD cambiaron .. O si quieres hacer una aplicación que pueda usar indistintamente cualquier BD que acepte la capa que uses ...

Ademas.. las capas de abstracción de BD te permiten hacer otras cosas como: control centralizado de erroes (para no andar usando "or die (mysql_error()) o la función que corresponda" en todas las funciones de tu BD que uses, estadisticas (ejemplo cuantas llamadas a tu BD haces .. esto es "Anecdotico" pero si no usas una capa de este estilo .. implementar esa funcionalidad es casi como crear una mini-capa de abstracción).

Por lo demás .. así traba exactamente ADOdb (con otros métodos, formas de uso o funcionalidade extra .. pero en su base es esa).


Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #7 (permalink)  
Antiguo 20/02/2004, 08:08
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Por cierto .. mysql_get_var() no existe como función nativa de PHP para Msyql ... Sería mysql_result() en su defecto lo más parecido ..

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #8 (permalink)  
Antiguo 20/02/2004, 08:11
 
Fecha de Ingreso: enero-2004
Mensajes: 235
Antigüedad: 13 años, 11 meses
Puntos: 0
Por cierto, todo esto cómo lo acabas encontrando?. Lo digo por si siempre estas buscando soft que mejore el que tienes o yo que se...

Yo uso Savant como template, sistema de plantillas que usa las caracteristicas de php para la creacion de plantillas, y no neccesitas aprender una nuevo lenguaje ya que la logica del template es en php.


Savant Template:
http://phpsavant.com/
Savant is a powerful but lightweight PEAR-compliant template system for PHP. It is non-compiling, and uses PHP itself as its template language so you don't need to learn a new markup system (c.f. comments and explanation from Harry Fuecks and Brian Lozier). It has an object-oriented system of template plugins and output filters, so it sports almost all of the power of Smarty with almost none of the overhead.

Sabes, los moderadores o la gente experta del foro estaria bien que pusieran que classes/paquetes usan.. así los demàs tendriamos referencias para problarlo. Hombre se supone que con la experiencia que teneis vosotros no usareis paquetes que no de adecúen a vuestras necesidades, supongo.

Un saludo y gracias.
  #9 (permalink)  
Antiguo 20/02/2004, 08:22
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Yo personalmente ando probando siempre cosas nuevas y no me ciño a lo más "popular" o más usado.

Eso sí ..lo tengo presente por si sale el caso .. Pero como todos nosotros andamos "reinventando" la rueda constantemente .. siempre sale alguna "rueda" que te resulta más comodo usar o mejor rendimiento o simplemente la entiendes mejor ...

Hoy uso las classes que menciono .. mañana no sé .. (trabajo sólo como programador .. así que me puedo permitir todo esto y perder tiempo viendo otras alternativas y no seguir usando lo que alguna vez probé y funcionó .. )

Sobre el comentario que haces de poner las classes o herramientas que usa cada uno .. Lo puedes proponer si quires ... abre un nuevo mensaje y cada uno ponga lo que usa.

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #10 (permalink)  
Antiguo 20/02/2004, 08:24
 
Fecha de Ingreso: enero-2004
Mensajes: 235
Antigüedad: 13 años, 11 meses
Puntos: 0
Ya se lo que es abstraer la programacion del "Modelo". Lo que me ha hecho gracia, es lo del franchute ( francés ) que ha barrido hacia casa....y lo mismo se hace en 3 linias.. cómo lo he hecho yo.

No tiene mucho secreto lo que ha checo este señor, pasar todos los registros a un array multidimensional para recorrerlo.

Saludos, y no era mi intencion que te molestaras.

Un besito... jeje
  #11 (permalink)  
Antiguo 20/02/2004, 08:42
Avatar de vitxo  
Fecha de Ingreso: septiembre-2003
Ubicación: Valencia
Mensajes: 219
Antigüedad: 14 años, 3 meses
Puntos: 0
Yo soy un poco cabezón y siempre tiendo a hacerlo yo todo (luego me va como me va ):
desarrollo mi motor de plantillas basado en etiquetas XML (aunq lleva un mes abandonao), desarrollo como Webstudio mi propio "mini-framework" o marco de trabajo basado en el patrón Modelo Vista Controlador (y funciona! http://linuv.uv.es/2004/). Que para esta ocasión, como expliqué en el hilo de Webstudio, me olvidé de mi motor de plantillas (demasiado pesado en cuanto a rendimiento) y me monté una clasecilla para abstraer una pantilla que contiene PHP como lógica de la presentación.

Entonces, no sé cuán efectivo va a ser publicar cada uno lo que usa, igual sirve para liar más a la gente? :O

no sé, nos leemos :)
  #12 (permalink)  
Antiguo 20/02/2004, 08:43
Avatar de vitxo  
Fecha de Ingreso: septiembre-2003
Ubicación: Valencia
Mensajes: 219
Antigüedad: 14 años, 3 meses
Puntos: 0
am, y la clase DbConnection esa con la que te emperraste :)
  #13 (permalink)  
Antiguo 20/02/2004, 09:14
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Cita:
Mensaje Original por jmaribau
Ya se lo que es abstraer la programacion del "Modelo". Lo que me ha hecho gracia, es lo del franchute ( francés ) que ha barrido hacia casa....y lo mismo se hace en 3 linias.. cómo lo he hecho yo.

No tiene mucho secreto lo que ha checo este señor, pasar todos los registros a un array multidimensional para recorrerlo.

Saludos, y no era mi intencion que te molestaras.

Un besito... jeje
Bueno .. yo no estoy diciendo que sea original, ni la mejor (que no lo es). Sólo te he comentado que me gustan sus métodos (y sobre gustos no hay nada escrito) ..

Pero te insisto que si dices que sabes lo que es abstrae la programación del "modelo" .. el tema no vá por hacer lo mismo en el mismo nº de líneas .. sino en que tus 3 líneas directas con funciones de mysql sólo servirá para Mysql .. mientras que si usas una capa de abastracción como puede ser esa del "franchute" o de los tipos del ADOdb .. o cualquier otra .. te va a servir para no depender en tu código PHP del motor de BD que tengas que usar en cada momento.

Ahora es cosa que si quieres usar una capa de abstracción de Base de datos bajo estas condiciones .. te busques la que más te guste o la que veas más "original" bajo tu punto de vista .. Ya te comenté que ADOdb es más completa que la que yo uso.


Un saludo,
  #14 (permalink)  
Antiguo 20/02/2004, 09:44
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 15 años, 5 meses
Puntos: 16
Hola,

Usar un abstraccion de BD no va a hacerte ser mas listo. Si el franchute puso el codigo largo quizas es porque no sabia hacerlo mejor. Y tu por usar su clase no te va a salir la inspiracion para hacerlo en una sola linea con su clase.

Una clase puede ayudarte a hacer codigo de mejor calidad haciendo ella entre bastidores lo que tu podrias hacer directamente.

La capa de abstraccion lo que hace es darte un interfaz comun de funciones para toda base de datos (algo parecido a lo que hace ODBC). Pero no te dan independencia total de la base de datos. Por ejemplo, creo que todas las abstracciones (al menos las que he visto) te permite pasar la consulta SQL entera. Bien, supongo que lo que haran sera llamar a la funcion xxxx_query() correspondiente. Pero, ¿que pasa si tu SQL es "propietaria" de un motor de base de datos? LIMIT funciona en MySQL, pero ¿y en el resto? Asi que no le veo tanta independencia, por si solas.

Quizas combinandola con los Data Objects (creo que se llaman asi), siendo el DAO el que use la ADOdb o PEAR:DB (o la que sea). Pero creando un DAO para cada base de datos que quieras que soporte tu aplicacion.

Tampoco he trabajado mucho estos conceptos, ya que como programo 100% contra MySQL no uso clases de abstraccion "externas". Uso una especie de DAOs (un poco chapucillas), que lo que hacen es que sea minimo y localizado el cambio en caso de migrar a otra BD.

Saludos.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #15 (permalink)  
Antiguo 20/02/2004, 12:21
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
ADOdb por ejemplo tiene sus métodos para consultas "limitadas" (LIMIT) para no depender del SQL del motor de BD para ese caso particular . .ya que no se trata igual ese concepto en SQL de Msyql o de PostgreSQL o menos todavía en BD por ODBC ...

Por eso hacía mención que . .cada una de esas "utilidades" .. hace algo más o menos que otras ...

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
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 08:10.