Tupale

Clase para recorrer y ejecutar consultas MySQL con PHP

En el curso de diseño de sitios web con PHP y MySQL  desde cero se utiliza Dreamweaver y los comportamientos de bases de datos que este proporciona para realizar las consultas y las operaciones con la base de datos, esta es una buena manera de empezar y de aprender a utilizar PHP y MySQL, sin embargo debes tener en cuenta que para llegar a ser un gran programador debes evolucionar y empezar a explorar el código, no solo para entenderlo sino también para poder escribirlo manualmente sin problemas, principalmente porque aunque Dreamweaver es una buena herramienta para aprender los desarrolladores profesionales prefieren usar herramientas mas poderosas del lado de la codificación para mantener organizado y controlados sus proyectos, ademas de liberarse de una gran cantidad de código generado por Dreamweaver que se podría considerar basura.

Clase de PHP y MySQL

Clase de PHP y MySQL

Lastimosamente cuando estamos empezando vemos mucho código que parece complicado pero si entendemos la lógica encontraremos una forma de organizarlo para poder sacar provecho a funciones que realmente necesitamos. esto es lo que pretendo hacer al publicar esta clase de PHP que utilizo en varios de mis proyectos para recorrer y ejecutar consultas en MySQL de manera simple y manteniendo el control de ejecución sin tener que recurrir a Dreamweaver.

<?php
/**
 * @author     Kalvin Manson <http://www.tupale.org> <kalvinmanson@gmail.com>
 * @license    Abierta, usala como quieras
 * @version    0.1
 */
class mysql {
	var $con;
	function __construct($db=array()) {
		$default = array(
			'host' => 'localhost',
			'user' => 'root',
			'pass' => '',
			'db' => 'test'
		);
		$db = array_merge($default,$db);
		$this->con=mysql_connect($db['host'],$db['user'],$db['pass'],true) or die ('Error connecting to MySQL');
		mysql_select_db($db['db'],$this->con) or die('Database '.$db['db'].' does not exist!');
	}
	function __destruct() {
		mysql_close($this->con);
	}
	function query($s='',$rows=false,$organize=true) {
		if (!$q=mysql_query($s,$this->con)) return false;
		if ($rows!==false) $rows = intval($rows);
		$rez=array(); $count=0;
		$type = $organize ? MYSQL_NUM : MYSQL_ASSOC;
		while (($rows===false || $count<$rows) && $line=mysql_fetch_array($q,$type)) {
			if ($organize) {
				foreach ($line as $field_id => $value) {
					$table = mysql_field_table($q, $field_id);
					if ($table==='') $table=0;
					$field = mysql_field_name($q,$field_id);
					$rez[$count][$table][$field]=$value;
				}
			} else {
				$rez[$count] = $line;
			}
			++$count;
		}
		if (!mysql_free_result($q)) return false;
		return $rez;
	}
	function execute($s='') {
		if (mysql_query($s,$this->con)) { return mysql_insert_id(); }
		else { return 0; } 
	}
	function totalrows($s='') {
		if(mysql_query($s,$this->con)) { return mysql_num_rows(mysql_query($s,$this->con)); }
		else { return 0; } 
	}
}

Este es el archivo dbclass.php que básicamente contiene la clase que ejecuta y genera los resultados de la base de datos.

Como Usarlo

Lo primero que debemos hacer es configurar los datos de la base de datos “host, usuario, password y base de datos” y luego en el archivo que necesitamos trabajar con nuestra base de datos incluimos nuestra clase dbclass.php

<?php require_once("dbclass.php"); ?>

Ahora vamos a hacer un ejemplo de recorrido de una tabla, suponiendo que tenemos una tabla llamada usuarios con estos campos (id, usuarios, password, email) podemos realizar una consulta para obtener la lista de usuarios así:

$resultado = $m->query('SELECT * FROM `usuarios`');

Esto me devolverá un array con los registros de dicha tabla.

Una de las ventajas que tiene esta classe frente al trabajo con Dreamweaver u otras clases es que si haces una consulta de varias tablas el array resultante sera un array multidimencional. supongamos que tenemos la tabla de usuarios mencionada anteriormente con un campo de llave foranea llamado (ciudad_id) y adicional a esto tenemos una tabla llamada ciudades con estos campos (id, ciudad), podremos hacer esta consulta:

$resultado = $m->query('SELECT * FROM usuarios, ciudad WHERE ciudades.id = usuarios.ciudad_id');

El resultado sera un array multidimencional en el que me asociara la ciudad de cada usuario al mismo de una manera similar a esta.

array {
 $resultado[0] {
  $resultado[0]['usuarios'] {
   $resultado[0]['usuarios']['id'] => '1'
   $resultado[0]['usuarios']['usuario'] => 'miusuario'
   $resultado[0]['usuarios']['password'] => 'mipassword'
   $resultado[0]['usuarios']['email'] => 'miemail'
  }
  $resultado[0]['ciudades'] {
   $resultado[0]['ciudades']['id'] => '2'
   $resultado[0]['ciudades']['ciudad'] => 'Bogotá'
  }
 }
}

Puedes visualizar el resultado de tus arrays usando la función print_r de PHP así:

<?php print_r($resultado); ?>

Bueno una de las cosas que agregue a la clase es una función para contar el total de registros, lo que nos es muy util para paginar y obtener datos de la información registrada en la base de datos. Para obtener el total de registros de una consulta solo tenemos que usar la funcion totalrows así:

$totalrows= $m->totalrows('SELECT * FROM usuarios, ciudad WHERE ciudades.id = usuarios.ciudad_id');

En este caso el valor resultante no es un array sino un valor entero con la cantidad de registros devueltos por la consulta.

Agregar, Editar y Eliminar registros

Para estas funciones pueden recurrir a la función execute y la función insert, la primera simplemente ejecuta una sentencia SQL, de hecho también puede ser usada para insertar registros, la diferencia es que execute nos devuelve un valor boleano (verdadero o falso) si se ejecuta la sentencia, pero la función insert nos devuelve el ultimo id agregado, esto puede ser útil cuando queremos hacer inserción en varias tablas en simultaneo relacionando campos.

$lastid= $m->insert('INSERT INTO usuarios (usuario, password, email) VALUES ('miusuario', '123456',email@dominio.com)');

El valor devuelto sera el id del registro insertado.

$resultado= $m->insert('UPDATE usuarios SET usuario='kalvin' WHERE id=1');

El resultado sera verdadero o falso si la consulta se ejecuta o no.

Si tienes dudas sobre el uso o quieres aportar codigo para enriquecer la clase puedes hacerlo en el foro de desarrollo:
http://tupale.org/foros/foro/desarrollo-web

Descarga la clase aquí: http://tupale.net/files/get/FIsZl_86ov/class-db.rar

4 comments for “Clase para recorrer y ejecutar consultas MySQL con PHP

  1. 1 julio, 2013 at 5:35 PM

    Amigo: veo te has tomado un buen trabajo, solo recuerda que usar funciones del tipo ‘mysql_query’ es mala idea pues son obsoletas ya y no seguiran siendo soportadas. Deberias usar PDO o mySqli

    • 1 julio, 2013 at 6:00 PM

      Amigo, tienes toda la razón jejejej ya estoy pasando la clase actualizada con mysqli para mejorar el rendimiento. Gracias

  2. Fer
    24 noviembre, 2016 at 3:54 PM

    hola, si no tengo acceso al usuario y contraseña de la BD como puedo conectar esta clase a la conexión existente donde solo tengo la variable $conexion; ? es decir solo tengo la ruta de la conexion del tipo include(‘../conexion.php’); y la variable $conexion.
    Es posible hacerla funcionar?

    • 24 noviembre, 2016 at 4:35 PM

      Temo que sin datos de acceso a la base de datos no puedes conectarte y usar esta clase, si tienes un array en conexión con la información de acceso puedes verla haciendo un print_r

      print_r($conexion);

Deja un comentario

A %d blogueros les gusta esto: