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&oacute;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&oacute;:
> > ' . 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