gafeman viciao2k3 logo viciao2k3
 
¿que estoy haciendo?   follow me
hasta que el sol no floje un poco, yo no me muevo de la cueva !
 
Suscribete →  
374  fans y una planta carnivora
 
Estás en: Viciao2k32007JunioMiércoles 27
7

Clase para la conexion a bases de datos MySQL

Tag: PHP    Por: gafeman    Lecturas: 2152   

Diario de cambios:
Version: 0.3
Ultima edicion: 6-julio-2007

  • arreglado un problema en la funcion enmarcar, siempre muestra el mensaje $str
  • he añadido los constructores para que sea compatible con PHP 5

Hoy he terminado de desarrollar dos classes en PHP

  1. para conectar con una base de datos MySQL
  2. para hacer llamadas a la base de datos (querys, updates, deletes, inserts, etc.)

Caracteristicas importantes:

  1. al hacer selects, si estas devuelven valores, se tiene que hacer mysql_free_result($mysql_result) para liberar recursos, esta clase lo hace automaticamente
  2. cuando haces una query esta devuelve una tabla de objetos
    puedes acceder a los valores mediante $query1->v[0]->nombre o recorrerlos todos con un foreach
    con lo que ya no tienes que dudar si era un mysql_fetch_row, mysql_fetch_ass­oc u otro...
  3. modo de depuracion, si estas en modo de depuracion si se producen errores, se mostraran las querys tal y como se han ejecutado a la base de datos
  4. muy facil de recordar y programar, ya que se tiene que escribir muy poco
  5. Cierra la conexion datos automaticamente al final de la aplicacion, utilizando un __destructor() compatible con PHP4 y 5

Ejemplo practico:

PHP:
  1. //incluimos la clase
  2. require 'class_mysql.php';
  3.  
  4. //creamos el objeto bd para poder conectar con la base de datos
  5. //Nota: para el modo debug se tiene que escribir: $bd = new bd(1);
  6. $bd = new bd();
  7.  
  8. //para hacer una query
  9. $query1 = new query('select id, nombre, apellidos from trabajadores',$bd);
  10.  
  11. //podemos comprobar si la query ha obtenido valores (no hace falta para mostrar datos)
  12. if($query1->n){
  13.  
  14. //recorremos las filas y mostramos los resultados
  15. foreach ($query1->v as $fila)
  16. echo $fila->d,' - ',$fila->nombre,' ',$fila->apellidos,'<br />';
  17. }else{
  18. //si no hay valores se muestra un mensaje
  19. echo 'no se encontraron resultados';
  20. }

Otras caracteristicas:

  • para evitar sql-injections, debes filtrar los datos de esta manera:
    PHP:
    1. $query1 = new query("select * from usuarios where nombre='".$bd->f($_POST['nombre'])."' and password='".$bd->f($_POST['password'])."'",$bd);

  • saber numero de filas afectadas, al hacer por ejemplo un update:
    PHP:
    1. $query1 = new query("update trabajadores set salario='1000' where departamento='12'",$bd);
    2. echo $query1->a,' registros actualizados';

Pasos:

  1. Descargar el fichero:
    class_mysql.txt
  2. Remplazar el nombre del fichero a class_mysql.php
  3. Subirlo al ftp

Recuerda: (antes de usar la clase tienes que editar las variables)

  • var $usuari='root'; //nombre de usuario de la base de datos
  • var $clau=''; //contraseña del usuario
  • var $servidor='localhost'; //nombre del servidor, normalmente localhost
  • var $nomBD=''; //nombre de la base de datos

Si te ha gustado, crees que se puede mejorar o si encuentras fallos, deja un comentario

  •  7  comentarios   —   2153  visitas
  •  0  pings   —   0  trackbacks
 
Pings
  1. No hay pingbacks

Trackbacks
  1. No hay trackbacks
  1. 1
    • gravatarHernan   
    • 12/10/2007   
    • Actividad   

    Tengo un problema con esto:

    $query1 = new query(”select * from usuarios where nombre=’”.$bd->f($_POST['nombre']).”‘ and password=’”.$bd->f($_POST['password']).”‘”,$bd);


    la clave que quiero comparar tiene que ser con MD5.

    En la version que no trataba con el sqlInjection funcionaba bastante bien. Pero, al mirar esta funcionalidad me parecio muy buena. Resulta que cuando a la clave digitada le aplico:


    $bd->f($_POST[MD5('password'])) o

    MD5($bd->f($_POST['password']))


    me sale el error:


    Warning: session_regenerate_id(): Cannot send session cookie - headers already sent by (output started at c:\archivos de programa\easyphp1-8\www\xyz\login.php:14) in c:\archivos de programa\easyphp1-8\www\xyz\includes\securesession.class.php on line 69


    Warning: Cannot modify header information - headers already sent by (output started at c:\archivos de programa\easyphp1-8\www\xyz\login.php:14) in c:\archivos de programa\easyphp1-8\www\xyz\login.php on line 28


    Soy algo inexperto en PHP. Alguna sugerencia?


  2. 2

    @Hernan: hola hernan, intentare hacer lo que pueda jeje


    lo de la clave lo tendrias que hacer con:

    $bd->f( MD5( $_POST['password'] ) )


    sobre el error que pones creo que no es de la classe, el fallo esta en que tienes algun “echo” o “print” antes de un “setcookie” o “header” y eso no se puede hacer


    ¡vigila! a veces puedes tener un salto de linea en la primera linea antes de un < ? y eso cuenta como un “echo”, si este es el caso borra la linea vacia


    ya me diras!


  3. 3
    • gravatarHernan   
    • 12/10/2007   
    • Actividad   

    @gafeman: Perfecto, don Gafeman!!!


    Estaba aplicando el metodo MD5 en el lugar equivocado de la sentencia. jajaja, algo despistado yo!


    Resulta que tu pagina esta muy bien, me he instalado el wordpress y el tema the master plan… pero como no tengo sitio web, solo lo hago por divertirme en mi casita.


    Felicidades y por aqui estara, como es usual, todos los dias.


    saludos desde Colombia!


  4. 4

    Como puedo llamar al valor maximo de un campo? quiero decir, quiero saber de todos los valores en un campo cualquiera, por ejemplo “numero de usuarios”, que me devuelva el campo con el mayor nuemro. Si por ejemplo en ese campo tengo 3, 100 y 200, pues que me devuelva el 200…


  5. 5
    • gravatarmauri   
    • 2 semanas   
    • Actividad   

    despues de buscar por la red una clase buena de conexion , creo que esta fue la que mejor encontre.

    Tengo la duda de cuando quiero mostrar los valores atraves de un select o una lista(tabla de una web), como se hace ya que aqui se entregan todos los valores de una.

    echo $fila->d,’ - ‘,$fila->nombre,etc


    se deben crear funciones apartes(listar por select, listar por tablas)? o hay una forma de enviar los datos y luego ordenarlos ?, en este caso lso “echo” no me acomodan mucho.

    gracias por la clase

    saludos!!!


  6. 6
    • gravatarbuenroger   
    • 5 días   
    • Actividad   

    Hola: estoy trabajando en una version de tu class personalizandola un poco para mis necesidades. Estoy un poco confundido con las funciones bd y query ya que al hacer debug en eclipse me salta un aviso de PHP5 strict advirtiendome de metodo ya definido (pues redefinen el _construct).¿estan estas funciones ahi por compatibilidad con PHP4?¿Se pueden quitar para trabajar solo con PHP5? o si no, ¿como hago para que no salte el warning del debugger?. No se si podrias comentar un poco más tu código para los que recién empezamos con la POO en PHP.


  7. 7

    @buenroger: para que solo sea compatible con php5, elimina o comenta las funciones que tengan el mismo nombre de la classe, por ejemplo de la clase bd puedes comentar toda la funcion: function bd($debug=0)


    a ver si tienes suerte y no te salta el warning :P


0-0

Código de conducta


Cualquier comentario / usuario que no cumpla uno de los siguientes requisitos,
sera borrado sin previo aviso:
  1. Ser persona
  2. No insultar (A eso se le llama Trolear)
  3. No escribir el texto en mayusculas (Es lo mismo que gritar)
  4. No Spamear (ej. hablar de lo que comiste ayer...)
  5. Evitar comentarios del tipo soy primero, soy segundo, hijo de puta...
  6. Escribir el comentario en castellano
  7. Saber el día de la semana que naciste
  8. No deshonrar la ortografia del editor

La sole

¡Participa en la discusión!




Tu Comentario:

background by eboy