Classe para gerenciar o BD de forma rápida

  • Autor Autor jackl007
  • Data de início Data de início
Tradução em andamento: em alguns minutos este tópico estará em português. Por enquanto, o conteúdo está no original em espanhol. Ver original
jackl007

jackl007

Eta
Programador
Verificación en dos pasos activada
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:
Inserir CODE, HTML ou 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
Inserir CODE, HTML ou 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:
Inserir CODE, HTML ou 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):
Inserir CODE, HTML ou 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
Inserir CODE, HTML ou PHP:
<?php 
DEFINE('SERVER','localhost');
DEFINE('DB_NAME','base_datos');
DEFINE('DB_USER','usuario');
DEFINE('DB_PASS','clave');
?>
 
Foi útil? Participe da conversa

Com sua conta grátis você pode responder, mandar mensagem privada ao autor e comprar com Saldo retido: o pagamento é liberado quando você recebe o combinado.

Leva 30 segundos · você volta a este tópico ao terminar
Esta bien pero creo que te falta un par de die("Error conectando");
 
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());
 
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.
 

Tópicos similares

Voltar
Topo