Ver Mensaje Individual
  #1 (permalink)  
Antiguo 25/01/2014, 07:37
DandyCC
 
Fecha de Ingreso: junio-2012
Mensajes: 147
Antigüedad: 11 años, 10 meses
Puntos: 1
Migración de una clase que gestiona las conexiones a BD de mysql a mysqli

Buenas. Hasta ahora siempre he utilizado una clase que encontré por internet que gestionaba las conexiones con la bd haciendo uso de mysql. Quiero migrar a mysqli manteniendo la clase, para así no tener que tocar todo el código. He intentado modificarla yo sólo pero me es imposible, así que si alguien pudiera ayudarme se lo agradecería, porque sólo de pensar en modificar cada script que accede a la BD me entran sudores fríos

Mil gracias!

Esta es la clase:
Código PHP:
Ver original
  1. <?php
  2. /* Clase encargada de gestionar las conexiones a la base de datos */
  3. Class DB {
  4.     private $servidor='localhost';
  5.     private $usuario='root';
  6.     private $password='';
  7.     private $base_datos='dbname';
  8.     private $link;
  9.     private $stmt;
  10.     private $array;
  11.    
  12.     static $_instance;
  13.    
  14.     /* La función construct es privada para evitar que el objeto pueda ser creado mediante new */
  15.     private function __construct() {
  16.         $this->conectar();
  17.     }
  18.    
  19.     /* Evitamos el clonaje del objeto. Patrón Singleton */
  20.     private function __clone(){ }
  21.    
  22.     /* Función encargada de crear, si es necesario, el objeto. Esta es la función que debemos llamar desde fuera de la clase para instanciar el objeto, y así, poder utilizar sus métodos */
  23.     public static function getInstance() {
  24.         if (!(self::$_instance instanceof self)) {
  25.             self::$_instance=new self();
  26.         }
  27.         return self::$_instance;
  28.     }
  29.    
  30.     /* Realiza la conexión a la base de datos */
  31.     private function conectar() {
  32.         $this->link=mysql_connect($this->servidor, $this->usuario, $this->password);
  33.         mysql_select_db($this->base_datos,$this->link);
  34.         @mysql_query("SET NAMES 'utf8'");
  35.     }
  36.    
  37.     /* Realiza la desconexión de la base de datos */
  38.     public function desconectar() {
  39.         mysql_close($this->link);
  40.     }
  41.    
  42.     /* Método para ejecutar una sentencia sql */
  43.     public function ejecutar($sql) {
  44.         $this->stmt=mysql_query($sql,$this->link);
  45.         return $this->stmt;
  46.     }
  47.    
  48.     /* Método para obtener una fila de resultados de la sentencia sql */
  49.     public function obtener_fila($stmt,$fila){
  50.         if ($fila==0) {
  51.             $this->array=mysql_fetch_array($stmt);
  52.         }
  53.         else {
  54.             mysql_data_seek($stmt,$fila);
  55.             $this->array=mysql_fetch_array($stmt);
  56.         }
  57.         return $this->array;
  58.     }
  59.    
  60.     // Devuelve el último id del insert introducido
  61.     public function lastID() {
  62.         return mysql_insert_id($this->link);
  63.     }
  64. }
  65. ?>

Y era muy fácil de usar. Por ejemplo, para conectar, simplemente:

Código PHP:
Ver original
  1. $bd=DB::getInstance();
  2. if(!$bd) { // error en la conexion }

Para hacer una consulta simple:
Código PHP:
Ver original
  1. $sql = "SELECT nombre, apellidos FROM tbl_user WHERE iduser = 1";
  2. $stmt = $bd->ejecutar($sql);
  3. if (!$stmt) {// error en la consulta}

Para recoger los resultados:
Código PHP:
Ver original
  1. if (mysql_num_rows($stmt) > 0) {
  2.     while ($row=$bd->obtener_fila($stmt,0)) {
  3.         echo $row['nombre'] . " " . $row['apellidos'];
  4.     }
  5. }