Conectar a MYSQL, me canse de la misma forma
Rubencho
ruben.rhidalgo en gmail.com
Jue Ago 24 02:11:24 CLT 2006
Holas :-)
On Wed, 23 Aug 2006 20:58:41 -0300
"Carlos Barbiero" <carlosbarbiero en gmail.com> wrote:
> On 8/23/06, Eduardo <jamrojo en gmail.com> wrote:
> > ME canse de esto:
> >
> >
> > <?php
> > // Conexion, seleccion de base de datos
> > $enlace = mysql_connect('host_mysql', 'usuario_mysql',
> > 'contrasenya_mysql')
> > or die('No pudo conectarse : ' . mysql_error());
> > echo 'Conexión exitosa';
> > mysql_select_db('mi_base_de_datos') or die('No pudo seleccionarse la
> > BD.');
> >
> > // Realizar una consulta SQL
> > $consulta = 'SELECT * FROM mi_tabla';
> > $resultado = mysql_query($consulta) or die('La consulta falló:
> > ' . mysql_error());
> >
> > // Impresion de resultados en HTML
> > echo "<table>\n";
> > while ($linea = mysql_fetch_array($resultado, MYSQL_ASSOC)) {
> > echo "\t<tr>\n";
> > foreach ($linea as $valor_col) {
> > echo "\t\t<td>$valor_col</td>\n";
> > }
> > echo "\t</tr>\n";
> > }
> > echo "</table>\n";
> >
> > // Liberar conjunto de resultados
> > mysql_free_result($resultado);
> >
> > // Cerrar la conexion
> > mysql_close($enlace);
> > ?>
> > y se me ocurrio q deberian existir clases para hacer lo mismo, de una
> > manera mas limpia y ordenada.
> > Me puse a googlear y sas!
> > http://phpclasses.promoxy.com/browse/class/10.html 573 clases!! así q
> > opte xq me recomendaran una manera de conectar a mysql desde php.
>
> Lo que hago es tener una clase de acceso a datos:
>
> Archivo mysql_access.php
> <?
> class mysql_access{
>
> //Constructor
> function mysql_access(){
>
> $NOMBRE_HOST = "localhost";
> $NOMBRE_BD = "bd";
> $NOMBRE_USRADM = "user";
> $PASSWD = "";
> $CONN = mysql_connect($NOMBRE_HOST,$NOMBRE_USRADM,$PASSWD);
> mysql_select_db($NOMBRE_BD);
> }
>
> //***************Metodos */
> function mGetAllUsers(){
> $sql ='SELECT * FROM users' ;
> $result=mysql_query($sql);
> return $result;
>
> }
>
> /*Aqui van todos los metodos de acceso a los datos de tu bd que se
> te ocurran*/
>
>
> function getRow($result){
> return mysql_fetch_array($result);
>
> }
>
> function mFreeResult($result){
> mysql_free_result($result);
> }
>
> //Cerrar Conexión
> function mCloseBD(){
> mysql_close();
>
> }
> }
> ?>
> ...........
>
> A la hora de llamar :
>
> listausuarios.php
> <?
> $db = new mysql_access();
> $result=$db-> mGetAllUsers();
> while ($row=$db->getRow($result)){
> echo "<p>Id: '".$row["id"]." Nombre: ".$row["nombre"]."</p>";
> }
> $db-> mFreeResult($result);
> $db->mCloseBD();
> ?>
>
> Asi tengo separado lo que es datos por un lado y presentacion por
> otro. A mi me sirve.
> Saludos
<Nota> Esta /inmejorable/ respuesta (tip para mi) la saque de
http://www.forosdelweb.com/showthread.php?p=1623601 ...aqui va:
<Nota />
El problema con ese diseño es que no estás "encapsulando" el uso de
bases de datos.
¿Por qué no el modelo "clásico" (y suficientemente probado como para no
tener que reinventarlo ) de una "clase de abstracción genérica" y luego
le pasas por parámetros o por métodos cual es la base que quieres usar?
Una instancia del objeto = una base de datos.
Dependerá también de qué es lo que quieres hacer con las bases, si vas
a interactuar entre ellas, etc.
Mi sugerencia sería que crees una clase "BaseDeDatos" que te abstraiga
de las clases "concretas" de abstracción (AdoDB, Pear, etc) e
implementes tú los métodos que vas a necesitar, pero que la
implementación contenga dentro las llamadas a los métodos de las clases
concretas.
Por ejemplo, si usas en todo tu sistema la clase AdoBD, y mañana
decides cambiar a Pear, tu código está tan acoplado que tendrás que
modificar todo el sistema donde use las bases de datos.
De lo contrario, solo modificas la implementación de la clase
"BaseDeDatos" y todo tu sistema no se entera, y el costo de los cambios
será mucho menor.
Tu sistema pasará a depender de "implementaciones abstractas" y no de
"implementaciones concretas", desacoplando mejor el código.
Más información sobre la lista de distribución PHP