Buenas, mas que una duda lo que vengo a hacer es a presentar una clase que escribi que me ha ayudado bastante en toodos los proyectos web que he realizado para ver que fallos le ven, o que mejoras le pondrian, principalmente las funciones que uso son insertar, obtener y ejecutarSQL.
El archivo es el siguiente:
Código PHP:
Ver original<?php
class bbdd{
private $link; //resource de la conexion
private $debug; //Bool para mostrar trazas o no.
private $server; //Servidor de la bbdd
private $baseDeDatos; //Nombre de la bbdd
private $usuario; //Usuaro de la bbdd
private $password; //Password del usuario de la bbdd
/*Cuando inicializamos la clase por defecto coge los parametros de un archivo de configuracion
con un array $conf = array() con las asociaciones de servidor,baseDeDatos,usuario,contrasena
ademas de poder inicializar el debug en true para hacer la traza de lo que va haciendo la clase*/
public function bbdd($debug=false,$server = '',$baseDeDatos = '',$usuario = '',$password = ''){
global $conf;
$this->debug = $debug;
if($server!='')
$this->server = $server;
else
$this->server = $conf['servidor'];
if($baseDeDatos!='')
$this->baseDeDatos = $baseDeDatos;
else
$this->baseDeDatos = $conf['baseDeDatos'];
if($usuario!='')
$this->usuario = $usuario;
else
$this->usuario = $conf['usuario'];
if($password!='')
$this->password = $password;
else
$this->password = $conf['contrasena'];
$this->conectar();
}
private function conectar(){
if($this->link!=null && $this->link!=false){ if($this->debug)
echo '<p>Ya tenemos una conexion abierta</p>';
return true;
}
$this->password, $this->baseDeDatos);
if($this->debug)
echo "<p>Error al conectar a la BBDD.</p>";
return false;
$this->desconectar();
if($this->debug)
echo "<p>Error al seleccionar la tabla.</p>";
return false;
}
if($this->debug)
echo '<p>Nos hemos conectado a la bbdd.</p>';
return true;
}
public function desconectar(){
if($this->link==null || $this->link==false){ if($this->debug)
echo "Estas intentando cerrar una conexion que no esta abierta. desconectar() bbdd";
return false;
}else{
if($this->debug)
echo '<p>Cerramos la conexion.</p>';
}
}
private function sentencia($sql){
if($this->debug)
echo "<p>La sentencia es: $sql</p>";
if($this->debug)
echo "Error al ejecutar la sentencia: $sql";
return false;
}
return $result;
}
/* Ejecuta una sentencia SQL */
public function ejecutarSQL($sql){
if($this->conectar()){
if($this->sentencia($sql))
return true;
else
return false;
}
return false;
}
/*Recorre el result de una sentencia SQL y la almacena en un array que devuelve.*/
private function recorrerSentencia($result){
$array[] = $row;
return $array;
}
/*Devuelve un array con los rows de la consulta,ejemplo:
$users = obtener("SELECT nombre, correo FROM users");
$users[<num_row>][<nombre_campo>];*/
public function obtener($sql){
if($this->conectar()){
$result = $this->sentencia($sql);
if($result)
$array = $this->recorrerSentencia($result);
else
return false;
return $array;
}
return false;
}
private function crearSQL2($tabla,$nombresCampo,$valores){
for($x=0;$x<count($valores);$x++) if($valores[$x]!='NULL' && $valores[$x]!='NOW()')
$valores[$x] = "'".$valores[$x]."'";
$stringValores = implode(',',$valores); $stringNombres = implode(',',$nombresCampo); $sql = "INSERT INTO $tabla ($stringNombres) VALUES ($stringValores);";
return $sql;
}
private function crearSQL($tabla,$valores){
for($x=0;$x<count($valores);$x++) if($valores[$x]!='NULL' && $valores[$x]!='NOW()')
$valores[$x] = "'".$valores[$x]."'";
$stringValores = implode(',',$valores); $sql = "INSERT INTO $tabla VALUES ($stringValores);";
return $sql;
}
/*ejemplo: insertar("users",array('NULL','pepe','Alicante',......));
devuelve el id autonumerico si es un insert autonumerico.*/
public function insertar($table,$valores){
$sql = $this->crearSQL($tabla,$valores);
if($this->conectar())
if($this->sentencia($sql))
else
return false;
else
return false;
}
/*ejemplo: insertar2("users",array(nombre,correo),array('Pepe','[email protected]')); /devuelve el id creado al insertarlo*/
public function insertar2($tabla,$nombresCampo,$valores){
$sql = $this->crearSQL2($tabla,$nombresCampo,$valores);
if($this->conectar())
if(sentencia($sql))
else
return false;
return false;
}
/*Cuando terminamos el script desconectamos la conexion si no se ha desconectado ya.*/
function __destruct(){
$this->desconectar();
}
/*Funcion que imita a la funcion mysql_real_escape_string de mysql-php
pero que no necesita de una conexion abierta.*/
public function mysql_escape_mimic($cadena){
return str_replace(array('\\', "\0", "\n", "\r", "'", '"', "\x1a"), array('\\\\', '\\0', '\\n', '\\r', "\\'", '\\"', '\\Z'), $cadena); }
return $cadena;
}
public function setDebug($debug){
$this->debug = $debug;
}
}
?>
El funcionamiento de la libreria es bien simple, cuando quiero mostrar X datos:
Código PHP:
Ver original$bbdd = new bbdd();
$usuarios = $bbdd->obtener('SELECT nombre FROM usuarios');
for($x=0;$x<count($usuarios);$x++){ echo 'Usuario: '.$usuarios[$x]['nombre'].'<br />';
}
Cuando quiero hacer algun delete o update:
Ej: mandamos por POST el id del usuario a borrar al script.
Código PHP:
Ver original$bbdd = new bbdd();
$idUser = $bbdd->mysql_escape_mimic($_POST['id']);
$bbdd->ejecutarSQL('DELETE FROM usuarios WHERE id = "'.$idUser.'"');
Para el update seria lo mismo.
Y cuando quiero insertar un nuevo usuario en la bbdd:
Código PHP:
Ver original$bbdd = new bbdd();
$nombreUser = $bbdd->mysql_escape_mimic($_POST['nombre']);
$idUserNuevo = $bbdd->insertar('usuarios',array(NULL,$nombreUser));
//Si la tabla tuviera campos opcionales, y no quisieramos rellenarlos usariamos insertar 2 y le pasariamos los mismos parametros mas 1 que sea los campos de la tabla.
Tambien agradeceria cualquier aporte similar a este al que pudierais ponerme algun link para verlo, da igual que este en ingles :)
Graaacias.