clase para manejar base de datos mysql en php poo

13
Clase para manejar base de datos MySQL en PHP April 5, 2008 PHP , Programacion Una de las máximas prioridades en una aplicación PHP que haga uso de una base de datos, es la organización y eficiencia del código para evitar consumo innecesario de memoria, esto es bien sabido por cualquier programador. Pero ¿qué hay de la separación del código de lógica y el de la base de datos? El patrón Modelo-Vista-Controlador nos puede ser de gran utilidad ya que separa la lógica (controladores) de scripts que acceden y relacionan las tablas de un base de datos (modelos) y de la interfaz gráfica (vistas). Pero en ocasiones no necesitamos de tantas capas de abstracción y decidimos programar todo revuelto. Aún así, utilizar una clase para los accesos a la base de datos nos es de gran ayuda para aquello de la organización del código. La clase que a continuación propongo utiliza un patrón llamado Singleton . Este patrón obliga a instanciar unicamente una vez la clase para evitar 2 o más conexiones simultáneas. La clase contiene métodos para ejecutar sentencias SQL, cargar resultados en forma de objetos, ver el número de consultas totales etc. <?php class DataBase { private $conexion; private $resource; private $sql; public static $queries; private static $_singleton; public static function getInstance(){ if (is_null (self::$_singleton)) { self::$_singleton = new DataBase(); } return self::$_singleton; } private function __construct(){ $this->conexion = @mysql_connect('localhost', 'db_user', 'db_password')); mysql_select_db('database_name', $this->conexion); $this->queries = 0; $this->resource = null; }

Upload: tukytutuky

Post on 21-Apr-2015

898 views

Category:

Documents


4 download

TRANSCRIPT

Page 1: Clase Para Manejar Base de Datos MySQL en PHP POO

Clase para manejar base de datos MySQL en PHP

April 5, 2008 PHP, Programacion

Una de las máximas prioridades en una aplicación PHP que haga uso de una base de datos, es la organización y eficiencia del código para evitar consumo innecesario de memoria, esto es bien sabido por cualquier programador. Pero ¿qué hay de la separación del código de lógica y el de la base de datos?

El patrón Modelo-Vista-Controlador nos puede ser de gran utilidad ya que separa la lógica (controladores) de scripts que acceden y relacionan las tablas de un base de datos (modelos) y de la interfaz gráfica (vistas). Pero en ocasiones no necesitamos de tantas capas de abstracción y decidimos programar todo revuelto. Aún así, utilizar una clase para los accesos a la base de datos nos es de gran ayuda para aquello de la organización del código.

La clase que a continuación propongo utiliza un patrón llamado Singleton. Este patrón obliga a instanciar unicamente una vez la clase para evitar 2 o más conexiones simultáneas. La clase contiene métodos para ejecutar sentencias SQL, cargar resultados en forma de objetos, ver el número de consultas totales etc.

<?php

class DataBase {

private $conexion;private $resource;private $sql;public static $queries;private static $_singleton;

public static function getInstance(){if (is_null (self::$_singleton)) {

self::$_singleton = new DataBase();}return self::$_singleton;

}

private function __construct(){$this->conexion = @mysql_connect('localhost', 'db_user', 'db_password'));mysql_select_db('database_name', $this->conexion);$this->queries = 0;$this->resource = null;

}

public function execute(){if(!($this->resource = mysql_query($this->sql, $this->conexion))){

return null;}$this->queries++;return $this->resource;

}

public function alter(){if(!($this->resource = mysql_query($this->sql, $this->conexion))){

return false;}return true;

}

public function loadObjectList(){

Page 2: Clase Para Manejar Base de Datos MySQL en PHP POO

if (!($cur = $this->execute())){return null;

}$array = array();while ($row = @mysql_fetch_object($cur)){

$array[] = $row;}return $array;

}

public function setQuery($sql){if(empty($sql)){

return false;}$this->sql = $sql;return true;

}

public function freeResults(){@mysql_free_result($this->resource);return true;

}

public function loadObject(){if ($cur = $this->execute()){

if ($object = mysql_fetch_object($cur)){@mysql_free_result($cur);return $object;

}else {

return null;}

}else {

return false;}

}

function __destruct(){@mysql_free_result($this->resource);@mysql_close($this->conexion);

}}?>

Si notamos, el constructor es privado. ¿Por qué? para asegurarnos de que la clase se instancie desde dentro de sí misma. Es decir, al ejecutar el método DataBase::getInstance() llamamos al constructor y creamos una única instancia de DataBase. Si volvemos a ejecutar ese método y la clase ya ha sido instanciada antes, entonces nos devolverá la instancia. Eso es el objetivo del patrón Singleton.

Veamos entonces como hacer una conexión, ejecutar una consulta y mostrar los resultados. Se asume que los parámetros de conexión como el host, el nombre de usuario y demás se especifican directamente en la clase.

view plain copy to clipboard print ?

1. // Hacemos la conexión  2. $db = DataBase::getInstance();  3.   4. // Supongamos que tenemos una tabla de usuarios  

Page 3: Clase Para Manejar Base de Datos MySQL en PHP POO

5. // Hacemos la consulta:  6. $db->setQuery('SELECT `id`,`nombre`,`grupo` FROM `usuarios`');  7.   8. // La ejecutamos y al mismo tiempo obtenemos un arreglo de objetos  9. // con los campos especificados en la consulta como propiedades.  10. $usuarios = $db->loadObjectList();  11.   12. // Los imprimimos directamente en pantalla...  13. foreach($usuarios as $usuario){  14.     echo 'ID: '.$usuario->id;  15.     echo 'Nombre: '.$usuario->nombre;  16.     echo 'Grupo: '.$usuario->grupo;  17.     echo '<br />';  18. }  

Y ahí tienen un pequeñísimo ejemplo de uso. Algunos métodos como el DataBase::loadObject o DataBase::loadObjectList fueron tomados de la API de Joomla. En fin, espero que les sea de utilidad.

Page 4: Clase Para Manejar Base de Datos MySQL en PHP POO

Crear una clase para conectar a base de datos con PHP

Por marcosdev el 29 de Octubre de 2008 con 44,412 visitas. PHP, MySQL y Servidor   Otros tutoriales por marcosdev.

Cuando un programador web comienza con PHP, una de las tareas más habituales es la de realizar conexiones y querys a la base de datos. Normalmente, muchísima gente utiliza funciones php para conectarse a una base de datos directamente en el código como puede ser mysql_connect (para conectarse a una base de datos MySQL) o pg_connect (para conectarse a una base de datos Postgress).

Esta forma de trabajar implica un problema muy serio si nuestro proyecto va orientado a una intranet, en la cual, de la noche a la mañana pueden tener la necesidad de cambiar la base de datos por otra diferente (por ejemplo, que una intranet crezca mucho y necesiten cambiar a una base de datos Oracle por funcionalidades específicas).

Si se da este caso podríamos tener un problema muy grave; deberíamos revisar todo el código que hemos escrito en busca de esas funciones específicas y adaptarlas a la nueva base de datos.

Para solventar este problema (crear una capa que nos abstraiga de que base de datos estemos utilizando) y además crear posibles funcionalidades nuevas, vamos a crear una clase muy sencilla la cual nos permita conectarnos a la base de datos. Esta clase la vamos a crear siguiendo el patrón de diseño Singleton. Los patrones de diseño son soluciones a problemas típicos de programación que se repiten contínuamente. El patrón Singleton nos ayuda a crear una clase la cual, si intentamos llamarla dos veces, realmente sólo es una instancia. En vez intentar crear el objeto, lo que haremos es instanciarlo. Esto nos permite conectarnos a la base de datos en cualquier punto del código (dentro de funciones, dentro de objectos,…) sin necesidad de crear más conexiones o tener que pasarla por parámetro (en el caso de querer que una función determinada que tengamos creada utilice una conexión existente y no cree otra nueva).

La estructura de la clase sería la siguiente:

Código :

<?php  /* Clase encargada de gestionar las conexiones a la base de datos */ Class Db{     private $servidor='localhost';    private $usuario='user';    private $password='test';    private $base_datos='testDB';    private $link;    private $stmt;    private $array;     static $_instance;     /*La función construct es privada para evitar que el objeto pueda ser creado mediante new*/    private function __construct(){       $this->conectar();    }     /*Evitamos el clonaje del objeto. Patrón Singleton*/ 

Page 5: Clase Para Manejar Base de Datos MySQL en PHP POO

   private function __clone(){ }     /*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*/    public static function getInstance(){       if (!(self::$_instance instanceof self)){          self::$_instance=new self();       }       return self::$_instance;    }     /*Realiza la conexión a la base de datos.*/    private function conectar(){       $this->link=mysql_connect($this->servidor, $this->usuario, $this->password);       mysql_select_db($this->base_datos,$this->link);       @mysql_query("SET NAMES 'utf8'");    }     /*Método para ejecutar una sentencia sql*/    public function ejecutar($sql){       $this->stmt=mysql_query($sql,$this->link);       return $this->stmt;    }     /*Método para obtener una fila de resultados de la sentencia sql*/    public function obtener_fila($stmt,$fila){       if ($fila==0){          $this->array=mysql_fetch_array($stmt);       }else{          mysql_data_seek($stmt,$fila);          $this->array=mysql_fetch_array($stmt);       }       return $this->array;    }     //Devuelve el último id del insert introducido    public function lastID(){       return mysql_insert_id($this->link);    }  } ?>

En esta clase, cómo podemos observar, existen varios métodos para conectar, obtener resultados de una query así como el último id que se ha creado mediante un Insert en un campo clave autoincremental.

Ahora veamos como utilizar esta clase:

Código :

<?php  /*Incluimos el fichero de la clase*/ require 'Db.class.php';  /*Creamos la instancia del objeto. Ya estamos conectados*/ $bd=Db::getInstance();  

Page 6: Clase Para Manejar Base de Datos MySQL en PHP POO

/*Creamos una query sencilla*/ $sql='SELECT NOMBRE FROM CLIENTES';  /*Ejecutamos la query*/ $stmt=$bd->ejecutar($sql);  /*Realizamos un bucle para ir obteniendo los resultados*/ while ($x=$bd->obtener_fila($stmt,0)){    echo $x['NOMBRE'].'<br />'; }  ?>

Muy sencillo y práctico.

Esta clase es muy (MUY) mejorable. Por ejemplo, en el siguiente tip veremos como utilizar un fichero de configuración que será utilizado por una clase llamada Conf, la cual será utilizada a su vez por esta clase que acabamos de crear. Además, introducir control de errores de conexión, niveles de seguridad para utilizar diferentes perfiles según el ámbito de la conexión,…

Esta clase va dirigida a aquellas personas que todavía no utilizan un Framework y siguen trabajando directamente sobre PHP.

Page 7: Clase Para Manejar Base de Datos MySQL en PHP POO

Wap gratis para celulares de claro y movistarBueno gente aca les dejo algo muy util (ES MI PRIMER POST)yo lo probe con un sony ericcson k800 con la Empresa Claro y me funciona perfectamente

ACLARACION:TENES QUE TENER MINIMO 0.50 CENTAVOS DE CREDTIO PARA ACCEDER PERO TE RECUERDO QUE ES GRATIS ESTOS CENTAVOS NO SE GASTAN

Configuración WAP y MMS Internet Gratis en tu Celular Claro, Movistar

Parámetros de Movistar

Configuración WAP

Internet Movil WAP GPRS Homepage: wap.e-mocion.com.pe:8582/2006gsm.wml IP: 200.4.196.117 Puerto: 8080 APN: wap.movistar.pe Usuario: movistar@wap Contraseña: movistar

Configuración MMS

Mensajes Multimedia (MMS) Server: mmsc.telefonicamovistar.com.pe:8088/mms/ IP: 200.4.196.118 Puerto: 8080 APN: mms.movistar.pe Usuario: movistar@mms Contraseña: movistar

Page 8: Clase Para Manejar Base de Datos MySQL en PHP POO

Parámetros de Claro

Configuración WAP

1.- Menu--> Ajustes--> Conectividad--> Comunicación datos--> Cuenta de Datos--> Nueva Cuenta--> Datos PS

Nombre: WAP GPRS APN: wap.claro.pe Nombre de usuario: claro Contraseña: claro (GUARDAR)

2.- Menu--> Ajustes--> Conectividad--> Ajustes Internet--> Perfiles Internet--> Nuevo perfil

Nombre: Wap Conectar con: WAP GPRS (GUARDAR)

3.- Ir sobre el perfil creado Wap y seleccionas "mas"--> Ajustes

Uso de Proxy: Si Dirección de Proxy: 192.168.231.30 Número de puerto: 80

Configuración MMS

1.- Menú--> Ajustes--> Conectividad--> Comunic. de datos--> Cuentas de datos--> Nueva cuenta--> Datos PS

Nombre: MMS GPRS APN: mms.claro.pe Nombre de usuario: claro Contraseña: claro (GUARDAR)

2.- Menú--> Ajustes--> Conectividad--> Ajustes Internet--> Perfiles Internet--> Nuevo perfil

Nombre: Claro MMS Conectar usando: (seleccione la cuenta que creaste anteriormente--> MMS GPRS ) (GUARDAR)

3.- En el perfil que acabamos de creear (Claro MMS) y le das en MÁS. Luego AJUSTES.

Page 9: Clase Para Manejar Base de Datos MySQL en PHP POO

Uso de Proxy diga: SI Dirección de proxy: 192.168.231.30 Número de puerto: 80 (GUARDAR)

4.- Menú--> Mensajes--> Ajustes--> Msj con imagen--> Perfil MMS--> Nuevo perfil

Nombre Perfil MMS: MULTIMEDIA Servidor de msjs: http://claro/servlets/mms Perfil de internet: Claro MMS (GUARDAR)

POR FAVOR AYUDEN A QUE SEA FULL USER O POR LO MENOS AGRADESCAN JEJEJE SALUDOS TARINGUEROS¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡

Page 10: Clase Para Manejar Base de Datos MySQL en PHP POO

Bueno, aqui te dejo la configuracion de MMS, WAP e INTERNET de mi W580i de la Compañia CLARO - EL SALVADOR. Para aquellos que al terminar de Flashar su telefono SE y se dan cuenta que el WAP y el MMS no estan configurados, asi que a todos los que les paso ese problema, incluyendome a mi con un W300i aqui los ayudo con estas configuraciones (recuerden que son para El Salvador).

Configuracion WAP

PASO UNO:Menú--> Ajustes--> Conectividad --> Comunic. de datos--> Cuentas de datos--> Nueva cuenta--> Datos GPRS--> Nombre: WAP CLAROAPN: wap.ideasclaroNombre de usuario:Contraseña:(GUARDAR)

PASO DOS:Menú--> Ajustes--> Conectividad--> Ajustes Internet--> Perfiles Internet--> Nuevo perfil-->Nombre: WAP CLAROConectar usando: WAP CLAROUso de Proxy: SIDirección de proxy: 216.230.133.066Número de puerto: 8080(GUARDAR)

Configuracion MMS

PASO UNO:Menú--> Ajustes--> Conectividad--> Comunic. de datos--> Cuentas de datos--> Nueva cuenta--> Datos GPRS--> Nombre: MMS CLAROAPN: mms.ideasclaroNombre de usuario:Contraseña:(GUARDAR)PASO DOS:Menú--> Ajustes--> Conectividad--> Ajustes Internet--> Perfiles Internet--> Nuevo perfil-->Nombre: MMS CLAROConectar usando: MMS CLAROUso de Proxy: SIDirección de proxy: 216.230.133.066Número de puerto: 8080(GUARDAR)

PASO TRES:Menú--> Mensajes--> Ajustes--> Msj con imagen--> Perfil MMS--> Nuevo perfil-->Nombre Perfil MMS: MMS CLAROServidor de msjs: [Solo usuarios registrados pueden ver los enlaces.]Perfil de internet: MMS CLARO(GUARDAR)

Configuracion Internet CLARO

Page 11: Clase Para Manejar Base de Datos MySQL en PHP POO

PASO UNO:Menú--> Ajustes--> Conectividad--> Comunic. de datos--> Cuentas de datos--> Nueva cuenta--> Datos GPRS--> Nombre: Internet CLAROAPN: internet.ideasclaroNombre de usuario:Contraseña:(GUARDAR)PASO DOS:Menú--> Ajustes--> Conectividad--> Ajustes Internet--> Perfiles Internet--> Nuevo perfil-->Nombre: Internet CLAROConectar usando: Internet CLAROUso de Proxy: NODirección de proxy:Número de puerto:(GUARDAR)

NOTA: Al finalizar de crear los tres perfiles de Internet debe de quedar selecionado el perfil WAP CLARO, de esta manera: Menú--> Ajustes--> Conectividad--> Ajustes Internet--> Perfiles Internet, y seleccionas y quedara con un punto a la parte, de esta forma: (.)WAP CLAROSe debe de seguir cada uno de los pasos antes mencionados para que la configuracion pueda ser efectiva, en los casos como por ejemplo: "Nombre de Usuario" o "Contraseña" deben de quedar vacios, asi como cualquier otro en el cual no haya puesto su respectiva selección.

ENKONTRE ESTO TAMBIEN

Tigo

WAPwapNombre de cuenta: WAP TigoAPN o Punto de acceso: wap.tigo.svWAP Gateway o Punto IP: 10.16.17.20Nombre de Usuario: Dejar vacioContraseña o Password: Dejar vacioPágina de inicio: http://wap.tigo.com.sv

MMSmmsNombre de cuenta: MMS TigoAPN o Punto de acceso: mms.tigo.svWAP Gateway o Punto IP: 10.16.17.12Nombre de Usuario: Contraseña o Password: Página de inicio: http://mms

Puedes vistar mi web

http://celularesxkass.blogspot.com/

Page 12: Clase Para Manejar Base de Datos MySQL en PHP POO

hace 3 años Notificar un abuso

Puntuación del usuario que pregunta:

Comentario de la persona que pregunta:gracias