Foros del Web » Programando para Internet » PHP »

PHP OO Clase de comunicacion PHP-MySQL

Estas en el tema de Clase de comunicacion PHP-MySQL en el foro de PHP en Foros del Web. Buenas, mas que una duda lo que vengo a hacer es a presentar una clase que escribi que me ha ayudado bastante en toodos los ...
  #1 (permalink)  
Antiguo 16/08/2011, 14:07
 
Fecha de Ingreso: marzo-2009
Mensajes: 52
Antigüedad: 15 años, 1 mes
Puntos: 0
Información Clase de comunicacion PHP-MySQL

Buenas, mas que una duda lo que vengo a hacer es a presentar una clase que escribi que me ha ayudado bastante en toodos los proyectos web que he realizado para ver que fallos le ven, o que mejoras le pondrian, principalmente las funciones que uso son insertar, obtener y ejecutarSQL.

El archivo es el siguiente:

Código PHP:
Ver original
  1. <?php
  2.  
  3.     class bbdd{
  4.        
  5.         private $link;          //resource de la conexion
  6.         private $debug;     //Bool para mostrar trazas o no.
  7.         private $server;        //Servidor de la bbdd
  8.         private $baseDeDatos;   //Nombre de la bbdd
  9.         private $usuario;       //Usuaro de la bbdd
  10.         private $password;      //Password del usuario de la bbdd
  11.        
  12. /*Cuando inicializamos la clase por defecto coge los parametros de un archivo de configuracion
  13.         con un array $conf = array() con las asociaciones de servidor,baseDeDatos,usuario,contrasena
  14.         ademas de poder inicializar el debug en true para hacer la traza de lo que va haciendo la clase*/
  15.         public function bbdd($debug=false,$server = '',$baseDeDatos = '',$usuario = '',$password = ''){
  16.             global $conf;
  17.             $this->link = null;
  18.             $this->debug = $debug;
  19.             if($server!='')
  20.                 $this->server = $server;
  21.             else
  22.                 $this->server = $conf['servidor'];
  23.             if($baseDeDatos!='')
  24.                 $this->baseDeDatos = $baseDeDatos;
  25.             else
  26.                 $this->baseDeDatos = $conf['baseDeDatos'];
  27.             if($usuario!='')
  28.                 $this->usuario = $usuario;
  29.             else
  30.                 $this->usuario = $conf['usuario'];
  31.             if($password!='')
  32.                 $this->password = $password;
  33.             else
  34.                 $this->password = $conf['contrasena'];
  35.             $this->conectar();
  36.         }
  37.        
  38.         private function conectar(){
  39.             if($this->link!=null && $this->link!=false){
  40.                 if($this->debug)
  41. echo                '<p>Ya tenemos una conexion abierta</p>';
  42.                 return true;
  43.             }
  44.             $this->link = mysqli_connect($this->server, $this->usuario,
  45.                                     $this->password, $this->baseDeDatos);
  46.             if (mysqli_connect_errno() != 0){
  47.                 if($this->debug)
  48.                     echo "<p>Error al conectar a la BBDD.</p>";
  49.                 $this->link = false;
  50.                 return false;
  51.             }else if(mysqli_errno($this->link) != 0){
  52.                 $this->desconectar();
  53.                 if($this->debug)
  54.                     echo "<p>Error al seleccionar la tabla.</p>";
  55.                 return false;
  56.             }
  57.             if($this->debug)
  58. echo            '<p>Nos hemos conectado a la bbdd.</p>';
  59.             return true;
  60.         }
  61.        
  62.         public function desconectar(){
  63.             if($this->link==null || $this->link==false){
  64.                 if($this->debug)
  65. echo                "Estas intentando cerrar una conexion que no esta abierta. desconectar() bbdd";
  66.                 return false;
  67.             }else{
  68.                 if($this->debug)
  69. echo                '<p>Cerramos la conexion.</p>';
  70.                 mysqli_close($this->link);
  71.                 $this->link = null;
  72.             }
  73.         }
  74.        
  75.         private function sentencia($sql){
  76.             if($this->debug)
  77. echo            "<p>La sentencia es: $sql</p>";
  78.             $result = mysqli_query($this->link,$sql);
  79.             if(mysqli_errno($this->link) != 0){
  80.                 if($this->debug)
  81. echo                "Error al ejecutar la sentencia: $sql";
  82.                 return false;
  83.             }
  84.             return $result;
  85.         }
  86.        
  87.         /* Ejecuta una sentencia SQL */
  88.         public function ejecutarSQL($sql){
  89.             if($this->conectar()){
  90.                 if($this->sentencia($sql))
  91.                     return true;
  92.                 else
  93.                     return false;
  94.             }
  95.             return false;
  96.         }
  97.        
  98.         /*Recorre el result de una sentencia SQL y la almacena en un array que devuelve.*/
  99.         private function recorrerSentencia($result){
  100.             $array = array();
  101.             while($row = mysqli_fetch_assoc($result))
  102.                 $array[] = $row;
  103.             return $array;
  104.         }
  105.        
  106.         /*Devuelve un array con los rows de la consulta,ejemplo:
  107.         $users = obtener("SELECT nombre, correo FROM users");
  108.         $users[<num_row>][<nombre_campo>];*/
  109.         public function obtener($sql){
  110.             if($this->conectar()){
  111.                 $array = array();
  112.                 $result = $this->sentencia($sql);
  113.                 if($result)
  114.                     $array = $this->recorrerSentencia($result);
  115.                 else
  116.                     return false;
  117.                 return $array;
  118.             }
  119.             return false;
  120.         }
  121.        
  122.         private function crearSQL2($tabla,$nombresCampo,$valores){
  123.             for($x=0;$x<count($valores);$x++)
  124.                 if($valores[$x]!='NULL' && $valores[$x]!='NOW()')
  125.                     $valores[$x] = "'".$valores[$x]."'";
  126.             $stringValores = implode(',',$valores);
  127.             $stringNombres = implode(',',$nombresCampo);
  128.             $sql = "INSERT INTO $tabla ($stringNombres) VALUES ($stringValores);";
  129.             return $sql;
  130.         }
  131.        
  132.         private function crearSQL($tabla,$valores){
  133.             for($x=0;$x<count($valores);$x++)
  134.                 if($valores[$x]!='NULL' && $valores[$x]!='NOW()')
  135.                     $valores[$x] = "'".$valores[$x]."'";
  136.             $stringValores = implode(',',$valores);
  137.             $sql = "INSERT INTO $tabla VALUES ($stringValores);";
  138.             return $sql;
  139.         }
  140.        
  141.         /*ejemplo: insertar("users",array('NULL','pepe','Alicante',......));
  142.         devuelve el id autonumerico si es un insert autonumerico.*/
  143.         public function insertar($table,$valores){
  144.             $sql = $this->crearSQL($tabla,$valores);
  145.             if($this->conectar())
  146.                 if($this->sentencia($sql))
  147.                     return mysqli_insert_id($this->link);
  148.                 else
  149.                     return false;
  150.             else
  151.                 return false;
  152.         }
  153.        
  154.         /*ejemplo: insertar2("users",array(nombre,correo),array('Pepe','[email protected]'));
  155.         /devuelve el id creado al insertarlo*/
  156.         public function insertar2($tabla,$nombresCampo,$valores){
  157.             $sql = $this->crearSQL2($tabla,$nombresCampo,$valores);
  158.             if($this->conectar())
  159.                 if(sentencia($sql))
  160.                     return mysqli_insert_id($link);
  161.                 else
  162.                     return false;
  163.             return false;
  164.         }
  165.        
  166.         /*Cuando terminamos el script desconectamos la conexion si no se ha desconectado ya.*/
  167.         function __destruct(){
  168.             $this->desconectar();
  169.         }
  170.        
  171.         /*Funcion que imita a la funcion mysql_real_escape_string de mysql-php
  172.         pero que no necesita de una conexion abierta.*/
  173.         public function mysql_escape_mimic($cadena){
  174.             if(is_array($cadena))
  175.                 return array_map(__METHOD__, $cadena);
  176.             if(!empty($cadena) && is_string($cadena)) {
  177.                 return str_replace(array('\\', "\0", "\n", "\r", "'", '"', "\x1a"), array('\\\\', '\\0', '\\n', '\\r', "\\'", '\\"', '\\Z'), $cadena);
  178.             }
  179.             return $cadena;
  180.         }
  181.        
  182.         public function setDebug($debug){
  183.             $this->debug = $debug;
  184.         }
  185.        
  186.     }
  187.  
  188. ?>

El funcionamiento de la libreria es bien simple, cuando quiero mostrar X datos:

Código PHP:
Ver original
  1. $bbdd = new bbdd();
  2. $usuarios = $bbdd->obtener('SELECT nombre FROM usuarios');
  3. for($x=0;$x<count($usuarios);$x++){
  4.  echo 'Usuario: '.$usuarios[$x]['nombre'].'<br />';
  5. }

Cuando quiero hacer algun delete o update:

Ej: mandamos por POST el id del usuario a borrar al script.
Código PHP:
Ver original
  1. $bbdd = new bbdd();
  2. $idUser = $bbdd->mysql_escape_mimic($_POST['id']);
  3. $bbdd->ejecutarSQL('DELETE FROM usuarios WHERE id = "'.$idUser.'"');
Para el update seria lo mismo.

Y cuando quiero insertar un nuevo usuario en la bbdd:

Código PHP:
Ver original
  1. $bbdd = new bbdd();
  2. $nombreUser = $bbdd->mysql_escape_mimic($_POST['nombre']);
  3. $idUserNuevo = $bbdd->insertar('usuarios',array(NULL,$nombreUser));
//Si la tabla tuviera campos opcionales, y no quisieramos rellenarlos usariamos insertar 2 y le pasariamos los mismos parametros mas 1 que sea los campos de la tabla.

Tambien agradeceria cualquier aporte similar a este al que pudierais ponerme algun link para verlo, da igual que este en ingles :)

Graaacias.
  #2 (permalink)  
Antiguo 20/08/2011, 12:49
 
Fecha de Ingreso: agosto-2011
Ubicación: en los corazones de la gente
Mensajes: 1
Antigüedad: 12 años, 8 meses
Puntos: 0
Respuesta: Clase de comunicacion PHP-MySQL

esta interesante, buen trabajo

Etiquetas: clase, mysql
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 18:39.