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

PHP OO Clase para conectar con base de datos

Estas en el tema de Clase para conectar con base de datos en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Googleando un poco y llendo de blog en blog, he encontrado una clase en PHP que al parecer permite conectar con una BD, lo bonito ...
  #1 (permalink)  
Antiguo 27/09/2011, 00:27
Avatar de BaByRoDrI  
Fecha de Ingreso: julio-2009
Ubicación: Mexico
Mensajes: 60
Antigüedad: 15 años, 4 meses
Puntos: 1
Pregunta Clase para conectar con base de datos

Googleando un poco y llendo de blog en blog, he encontrado una clase en PHP que al parecer permite conectar con una BD, lo bonito de la cosa es que creo que si se le añaden cosas se puede conectar con varios tipos de BD, aquí les dejo el source:

Código PHP:
Ver original
  1. <?php
  2. class DataAccess
  3. {
  4.     private $tipo = 'mysql';
  5.     private $host = 'localhost';
  6.     private $user = 'root';
  7.     private $pass = '';
  8.     private $base = 'ajax';
  9.    
  10.     private $conexion;
  11.     private $errorNumbers;
  12.    
  13.     private static $instance=null;
  14.    
  15.     private function __construct()
  16.     {
  17.         switch($this->tipo)
  18.         {
  19.             case 'mysql':
  20.             $this->errorList=array('duplicate_entry'=>1062);
  21.             $this->conexion=@mysql_connect($this->host, $this->user, $this->pass);
  22.  
  23.             if(!$this->conexion) return false;
  24.             else
  25.             {
  26.                 return @mysql_select_db($this->base);
  27.             }
  28.             break;
  29.         }
  30.     }
  31.    
  32.     public static function GetInstance()
  33.     {
  34.         if(self::$instance==null) self::$instance=new self();
  35.         return self::$instance;
  36.     }
  37.    
  38.     public function Disconnect()
  39.     {
  40.         switch($this->tipo)
  41.         {
  42.             case 'mysql':
  43.             return ($this->conexion=@mysql_close($this->connection));
  44.             break;
  45.         }
  46.     }
  47.    
  48.     public function LastErrorNumber()
  49.     {
  50.         switch($this->tipo)
  51.         {
  52.             case 'mysql':
  53.             return @mysql_errno($this->conexion);
  54.             break;
  55.         }
  56.     }
  57.    
  58.     public function LastErrorMessage()
  59.     {
  60.         switch($this->tipo)
  61.         {
  62.             case 'mysql':
  63.             return @mysql_error($this->conexion);
  64.             break;
  65.         }
  66.     }
  67.    
  68.     public function ErrorList($errorID)
  69.     {
  70.         return $this->errorList[$errorID];
  71.     }
  72.    
  73.     public function Query($query)
  74.     {
  75.         switch($this->tipo)
  76.         {
  77.             case 'mysql':
  78.             return @mysql_query($query);
  79.             break;
  80.         }
  81.     }
  82.    
  83.     public function GetRegistry($result)
  84.     {
  85.         switch($this->tipo)
  86.         {
  87.             case 'mysql':
  88.             return @mysql_fetch_array($result);
  89.             break;
  90.         }
  91.     }
  92.    
  93.     public function Escape($string)
  94.     {
  95.         switch($this->tipo)
  96.         {
  97.             case 'mysql':
  98.             return @mysql_real_escape_string($string);
  99.             break;
  100.         }
  101.     }
  102.    
  103.     public function NumRows($result)
  104.     {
  105.         switch($this->tipo)
  106.         {
  107.             case 'mysql':
  108.             return @mysql_num_rows($result);
  109.             break;
  110.         }
  111.     }
  112. }
  113. ?>

Por desgracia no he sabido utilizarla, si alguien puede ayudarme a utilizarla, porque se ve bastante bien esta clase!
  #2 (permalink)  
Antiguo 27/09/2011, 01:02
Avatar de andresdzphp
Colaborador
 
Fecha de Ingreso: julio-2011
Ubicación: $this->Colombia;
Mensajes: 2.749
Antigüedad: 13 años, 4 meses
Puntos: 793
Respuesta: Clase para conectar con base de datos

Bueno esa clase usa el patrón singleton (el cual he leído de muchos aquí, que no es recomendado para la base de datos).

El uso es básico:

Llenas los datos:

Código PHP:
Ver original
  1. private $tipo = 'mysql';
  2.     private $host = 'localhost';
  3.     private $user = 'root';
  4.     private $pass = '12345';
  5.     private $base = 'basededatos';

Luego ya puedes usarla:

Código PHP:
Ver original
  1. //No puedes hacer $da = new DataAccess(); ya que usa singleton
  2. //y el constructor es privado
  3. $da = DataAccess::GetInstance();
  4. $res = $da->Query('select * from persona');
  5.  
  6. while ($reg = $da->GetRegistry($res)) {
  7.     echo $reg['nombre'] . '<br />';
  8. }

y así con cada uno de los métodos, cuando los requieras.

Saludos.
__________________
Si sabemos como leer e interpretar el manual será mucho más fácil aprender PHP. En lugar de confiar en ejemplos o copiar y pegar - PHP
  #3 (permalink)  
Antiguo 27/09/2011, 06:57
Colaborador
 
Fecha de Ingreso: octubre-2009
Ubicación: Tokyo - Japan !
Mensajes: 3.867
Antigüedad: 15 años, 1 mes
Puntos: 334
Respuesta: Clase para conectar con base de datos

te recomiendo usar PDO en vez de esa clase
aunque la veas bien esta bastante pobre en varios aspectos... (manejo de errores, pasos innecesarios, etc)


saludos.
__________________
More about me...
~ @rhyudek1
~ Github
  #4 (permalink)  
Antiguo 27/09/2011, 07:33
Avatar de Webstudio
Colaborador
 
Fecha de Ingreso: noviembre-2001
Ubicación: 127.0.0.1
Mensajes: 3.499
Antigüedad: 23 años
Puntos: 69
Respuesta: Clase para conectar con base de datos

Hoy por hoy, PDO ya resolvió el tema de una API unificada para las distintas bases de datos. Yo entiendo la necesidad de crear una propia, pero hay ciertos puntos en los que reinventar la rueda, implica, un decremento de la eficiencia.
En este caso, los PDO ya están compilados dentro del PHP, no deberíamos utilizar más que eso.

Luego, si lo que queremos es crear un ORM, podemos construir uno ENCIMA de PDO.
__________________
Tutoriales Photoshop | Web-Studio.com.ar
Artículos PHP | ZonaPHP.com
  #5 (permalink)  
Antiguo 27/09/2011, 11:05
Avatar de BaByRoDrI  
Fecha de Ingreso: julio-2009
Ubicación: Mexico
Mensajes: 60
Antigüedad: 15 años, 4 meses
Puntos: 1
Pregunta Respuesta: Clase para conectar con base de datos

Cita:
Iniciado por andresdzphp Ver Mensaje
Bueno esa clase usa el patrón singleton (el cual he leído de muchos aquí, que no es recomendado para la base de datos).

El uso es básico:

Llenas los datos:

Código PHP:
Ver original
  1. private $tipo = 'mysql';
  2.     private $host = 'localhost';
  3.     private $user = 'root';
  4.     private $pass = '12345';
  5.     private $base = 'basededatos';

Luego ya puedes usarla:

Código PHP:
Ver original
  1. //No puedes hacer $da = new DataAccess(); ya que usa singleton
  2. //y el constructor es privado
  3. $da = DataAccess::GetInstance();
  4. $res = $da->Query('select * from persona');
  5.  
  6. while ($reg = $da->GetRegistry($res)) {
  7.     echo $reg['nombre'] . '<br />';
  8. }

y así con cada uno de los métodos, cuando los requieras.

Saludos.
Por que no es recomendable el patrón singleton para el acceso a BD ??
  #6 (permalink)  
Antiguo 27/09/2011, 13:29
Avatar de Webstudio
Colaborador
 
Fecha de Ingreso: noviembre-2001
Ubicación: 127.0.0.1
Mensajes: 3.499
Antigüedad: 23 años
Puntos: 69
Respuesta: Clase para conectar con base de datos

La verdad, yo no había escuchado tampoco que SINGLETON sea un mal patrón para Acceso a bases de datos, aunque se me ocurre que puede ser una mala idea si uno quiere manejar varias conexiones ( de "Lectura" o de "lectura/escritura", cuando uno tiene masters y slaves ).

Pero para este caso, se puede utilizar un DBManager que sea un Singleton, y que ofrezca una API para pedir las distintas conexiones, lo cual no lo veo malo per se.
__________________
Tutoriales Photoshop | Web-Studio.com.ar
Artículos PHP | ZonaPHP.com
  #7 (permalink)  
Antiguo 27/09/2011, 13:36
Avatar de andresdzphp
Colaborador
 
Fecha de Ingreso: julio-2011
Ubicación: $this->Colombia;
Mensajes: 2.749
Antigüedad: 13 años, 4 meses
Puntos: 793
Respuesta: Clase para conectar con base de datos

Bueno en el foro se ha discutido bastante el tema, por ejemplo:

http://www.forosdelweb.com/f18/control-errores-940771/

lo dije por lo que he leído como claramente dije. En google se discute mucho el tema.

Why Singletons are Evil

Sin duda lo mejor es usar PDO. Saludos.
__________________
Si sabemos como leer e interpretar el manual será mucho más fácil aprender PHP. En lugar de confiar en ejemplos o copiar y pegar - PHP
  #8 (permalink)  
Antiguo 27/09/2011, 13:49
Avatar de Webstudio
Colaborador
 
Fecha de Ingreso: noviembre-2001
Ubicación: 127.0.0.1
Mensajes: 3.499
Antigüedad: 23 años
Puntos: 69
Respuesta: Clase para conectar con base de datos

Lo que si te puedo asegurar que los Singletons son un dolor de WebOS a la hora de escribir UnitTests.
__________________
Tutoriales Photoshop | Web-Studio.com.ar
Artículos PHP | ZonaPHP.com

Etiquetas: clase, php
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

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 07:38.