Clase para gestionar la BD de forma rápida

jackl007

Eta
Programador
Verificación en dos pasos activada
Desde
26 Ene 2010
Mensajes
1.397
Hola amigos, hace un año programé esta clase para gestionar la BD en MYSQL y así poder realizar consultas de forma rápida y sencilla.

PD: La clase consta de 2 archivos, 1 de la propia clase en si (class.bd.php), y el otro con los datos de conexión: bd.php

Ejemplo de uso:

Usaremos una tabla sencilla, aquí el SQL:
Insertar CODE, HTML o PHP:
CREATE TABLE `persona` (
  `id` int(3) NOT NULL,
  `nombre` varchar(40) NOT NULL,
  `dni` int(10) NOT NULL,
  `celular` int(9) NOT NULL,
  `edad` int(2) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

Ejemplo.php
Insertar CODE, HTML o PHP:
<?php

	require_once('class.bd.php');

	$bd = new bd();
	$bd->inicio();
	
	$bd->query('truncate table persona'); //Eliminar todos los datos de la BD
	
	$datos = array();
	
/* Insertamos datos en la BD 	*/
	$datos['id'] = (int)1; // Como el atributo ID en la tabla es INTEGER, forzamos a que la variable sea un numero.
	$datos['nombre'] = "Juan Lopez";
	$datos['dni'] = (int)46217213;
	$datos['celular'] = (int)932649492;
	$datos['edad'] = (int)20;
	
	$sql = $bd->get_sql_insert($datos,"persona");
	echo "1. ".$sql."<br />";
	
	$rpta = $bd->query($sql); // QUERY usado para INSERT,  UPDATE, TRUNCATE, etc. No se usa con SELECT.
	
	$datos['id'] = (int)2;
	$datos['nombre'] = "Maria Gabriela";
	$datos['dni'] = (int)41654312;
	$datos['celular'] = (int)955412343;
	$datos['edad'] = (int)22;
	
	$sql = $bd->get_sql_insert($datos,"persona");
	echo "2. ".$sql."<br />";
	
	$rpta = $bd->query($sql); // QUERY usado para INSERT,  UPDATE, TRUNCATE, etc. No se usa con SELECT.
	
/* Actualizando datos */
	unset($datos); //Volcamos en contenido en memoria
	$datos['nombre'] = "Juan Perez Lopez";
	$sql = $bd->get_sql_update($datos,"persona", "id = 1");
	echo "3. ".$sql."<br />";
	
	$rpta = $bd->query($sql);
	
/* Aumentando en 1 unidad el valor de una variable, utilizado para aumentar visitas */
	unset($datos); //Volcamos en contenido en memoria
	$datos['edad+'] = true; // Genera: edad = edad + 1:
	$sql = $bd->get_sql_update($datos,"persona", "id = 1");
	echo "4. ".$sql."<br />";
	
	$rpta = $bd->query($sql);
	
/* Recuperando los registros en un array */
	$sql = "select id, nombre, edad from persona";
	$datos = $bd->wquery($sql);
	//var_dump($datos);
	
	if($datos!=null){ //Siempre se hace esta validación inicial
	 echo "<br /><table>";
	 echo "<head><tr><th>ID</th><th>NOMBRE</th><th>EDAD</th></tr></head>";
		foreach($datos as $n => $persona){
			echo "<tr>";
			echo "<td>".$persona['id']."</td>";
			echo "<td>".$persona['nombre']."</td>";
			echo "<td>".$persona['edad']."</td>";
			echo "</tr>";
		}
	echo "</table><br />";
	
	}
	
/* RECUPERANDO UN VALOR en una Variable, se evita usar el bucle FOR para recorrer los datos ya que solo se tiene 1 registro */	
	$sql = "select nombre, edad from persona where id = 2 limit 1";
	$persona = $bd->wquery($sql, true); // Mando el parametro TRUE como 2do argumento para FORZAR
	echo "El nombre de la persona es: ".$persona['nombre'].", y su edad es: ".$persona['edad'];
	
	
/* Se cierra la conexion */
	$bd->fin();
?>

Imprime esto en pantalla:
Insertar CODE, HTML o PHP:
1. insert into persona (id, nombre, dni, celular, edad) values (1, "Juan Lopez", 46217213, 932649492, 20)

2. insert into persona (id, nombre, dni, celular, edad) values (2, "Maria Gabriela", 41654312, 955412343, 22)

3. update persona set nombre = "Juan Perez Lopez" where id = 1

4. update persona set edad = edad + 1 where id = 1

ID	NOMBRE	EDAD
1	Juan Perez Lopez	21
2	Maria Gabriela	22

El nombre de la persona es: Maria Gabriela, y su edad es: 22

Aquí el código de la clase (class.bd.php):
Insertar CODE, HTML o PHP:
<?
/*
	Class BD v1.6 - ####### NO EDITAR #######
	Clase para gestionar MySQL de modo muy facil
	Creador: J. K. Benites (http://www.twitter.com/jkbenites) / http://www.bensg.com
	Última modificación: 12/31/2012 08:18 am
	Licencia: GRATUITA
*/

require_once("bd.php");
class bd{
		private $bd;
		public function inicio(){
		/*
			Inicia los eventos
		*/
			$this->bd = @mysql_connect(SERVER,DB_USER,DB_PASS);
			if($this->bd) {
				$cBd = @mysql_select_db(DB_NAME, $this->bd);
				if(!$cBd) {
					echo "<p>No se puede conectar a la Base de Datos. Asegurese que la base de datos exista y sea el mismo en el archivo bd.php</p>";
					exit;
				}
			}else {
				echo "<p>No se puede conectar al host. Por favor verifique los datos de conexion en el archivo bd.php</p>";
				exit;
			}
      }
	  
	 function wquery($sql, $valor_retorno_unico=false){
		/*
			Hace un query con datos al retorno.
		*/
		if(!$this->bd){
			return -1;
		}else{
			$rpta = @mysql_query($sql, $this->bd) or die(@mysql_error());
			$total = @mysql_num_rows($rpta);	
			if($total > 0){
				$array = array();
				$c=0;
				if($total==1){
					if($valor_retorno_unico == false){
						$array[0] = @mysql_fetch_assoc($rpta);
						return $array;
					}else{
						return @mysql_fetch_assoc($rpta);
					}			
				}else{
					while($reg= @mysql_fetch_assoc($rpta)){
						$array[$c]= $reg;
						$c++;
					}
					return $array;				
				}
			}else{
				return 0;
			}			
		}
	  }
	  function query($sql){
	  /*
		Hace un query sin valor de retorno de datos
	  */
		if(!$this->bd){
			return -1;
		}else{
			if(@mysql_query($sql,$this->bd)!=false)
				return 1;
			else 
				return 0;
		}
	  }


	function get_sql_insert($data, $tabla){
		/*
			Crea la cadena SQL correspondiente para hacer un INSERT
		*/
			$sql = 'insert into '.$tabla.' (';
			$keys = '';
			$values ='';
			unset($data['bd']);
			if(!is_array($data)){return false;}
			foreach($data as $llave => $v){
				$flag=false;
				if(gettype($v)=="integer" or gettype($v)=="double" or gettype($v)=="float"){
					$values.=$v.', ';
					$flag=true;
				}
				if(gettype($v)=="string" and $flag==false){
					$values.='"'.$v.'", ';
					$flag=true;
				}
				if($flag==true){
					//Todo Ok
					$keys.= $llave.', ';
				}
			}
			if($flag==true){
				$keys = substr($keys,0,strlen($keys)-2);
				$values = substr($values,0,strlen($values)-2);
				$sql.=$keys.') values ('.$values.')';
				return $sql;
			}else{
				return null;
			}
	}

	function get_sql_update($data,  $tabla, $condicional){
		/*
			Crea la cadena SQL correspondiente para hacer un UPDATE
		*/
			$sql = 'update '.$tabla.' set ';
			$condicional = preg_replace("#'#",'"',$condicional);
			unset($data['bd']);
			if(!is_array($data)){return false;}
			foreach($data as $llave => $v){
				$value ='';	
				$key = $llave;
				$flag = false;
				if(gettype($v)=="integer" or gettype($v)=="double" or gettype($v)=="float"){
					$value = $v;
					$flag=true;
				}
				if(gettype($v)=="string" and $flag==false){
					$value.='"'.$v.'"';
					$flag = true;
				}
				if(gettype($v)=="boolean" and $flag==false){
					if(substr($key,strlen($key)-1,1)=="+"){
						$key = substr($key,0,strlen($key)-1);
						$value = $key.' + 1';
						$flag=true;
					}
					if(substr($key,strlen($key)-1,1)=="-"){
						$key = substr($key,0,strlen($key)-1);
						$value = $key.' - 1';
						$flag=true;
					}
				}
				if($flag==true){
					//Todo Ok
					$sql.= $key.' = '.$value.', ';
				}
				
			}
			$sql = substr($sql,0,strlen($sql)-2);
			if($condicional!=null){
				$sql.=' where '.$condicional;
			}
			if($flag==true){
				return $sql;
			}else{
				return null;
			}
	}
	function get_nuevo_id($tabla){	
		$bd = new bd();
		$bd->inicio();
		$datos = $bd->wquery('SHOW TABLE STATUS LIKE "'.$tabla.'"',true);
		$bd->fin();
		return (integer)$datos['Auto_increment'];		
	}	  
	function fin(){
	  /*
		Cierra la conexión a la BD.
	  */
		@mysql_close($bd);
	}
	
}
?>

archivo bd.php
Insertar CODE, HTML o PHP:
<?php 
DEFINE('SERVER','localhost');
DEFINE('DB_NAME','base_datos');
DEFINE('DB_USER','usuario');
DEFINE('DB_PASS','clave');
?>
 

ciberutilidades

Iota
Programador
Verificación en dos pasos activada
¡Ha verificado su Paypal!
Desde
16 Ago 2010
Mensajes
2.290
Le puse un exit que finaliza la ejecución, o hay alguna diferencia?

Die y exit es un contruccion del lenguaje, y por lo que dice php.net se pueden usar instintivamente, aunque veo que lo usas distinto al clasico mysql_conect() or die(mysql_error());
 

kronenmix

Beta
Verificado por Whatsapp
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
Desde
4 Sep 2010
Mensajes
49
Está bien, pero yo los errores no los mostraría directamente, ni usaría un die. Mete el error en una global y muestralos solo para debug o bien te envías los errores por email, a modo de alertas. Así se cazan errores que no encontrarías navegando tí mismo.