Suscribete →
Clase para la conexion a bases de datos MySQL
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
- para conectar con una base de datos MySQL
- para hacer llamadas a la base de datos (querys, updates, deletes, inserts, etc.)
Caracteristicas importantes:
- al hacer selects, si estas devuelven valores, se tiene que hacer mysql_free_result($mysql_result) para liberar recursos, esta clase lo hace automaticamente
- 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_assoc u otro...
- 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
- muy facil de recordar y programar, ya que se tiene que escribir muy poco
- Cierra la conexion datos automaticamente al final de la aplicacion, utilizando un __destructor() compatible con PHP4 y 5
Ejemplo practico:
PHP:
-
//incluimos la clase
-
require 'class_mysql.php';
-
-
//creamos el objeto bd para poder conectar con la base de datos
-
//Nota: para el modo debug se tiene que escribir: $bd = new bd(1);
-
$bd = new bd();
-
-
//para hacer una query
-
$query1 = new query('select id, nombre, apellidos from trabajadores',$bd);
-
-
//podemos comprobar si la query ha obtenido valores (no hace falta para mostrar datos)
-
if($query1->n){
-
-
//recorremos las filas y mostramos los resultados
-
foreach ($query1->v as $fila)
-
}else{
-
//si no hay valores se muestra un mensaje
-
echo 'no se encontraron resultados';
-
}
Otras caracteristicas:
- para evitar sql-injections, debes filtrar los datos de esta manera:
PHP:
-
$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:
-
$query1 = new query("update trabajadores set salario='1000' where departamento='12'",$bd);
-
Pasos:
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
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?
@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!
@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!
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…
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!!!
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.
@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