Cargando



Clase para gestionar bases de datos MySQL con MySQLi y pHp

Utilizar una clase o librería con programación orientada a objetos proporciona una estructura modular clara para los programas y permite la definición de tipos de datos abstractos, donde los detalles de implementación se ocultan para que sea menos complejo y reutilizable el código. No te pierdas este tutorial donde se te explica todo esto.


mar 31 2015 20:35
Profesional
La extensión MySQLi es un controlador de base de datos relacional, se utiliza en el lenguaje de programación pHp para proporcionar una interfaz con bases de datos MySQL.

Ventajas de utilizar MySQLi

Sentencias preparadas o Prepared statements: es mas facil crear consultas, ofrece mucha seguridad contra la inyección SQL, con la funcion:
$mysqli->prepare();
Múltiples consultas o querys

Posibilidad de ejecutar varias querys o consultas en una conexión.

Ejemplo
$sqla  = "SELECT * from clientes;"

$sqlb .= "SELECT * FROM facturas ***** BY idcliente"
$mysqli->multi_query($sqla; sqlb)
Orientado a objetos

Esta característica de MySQLi permite al desarrollador emplear objetos para mejorar el uso, rendimiento y visibilidad del codigo fuente.

El driver MySQLi Extensión es utilizado en el lenguaje de programación PHP para proporcionar una interfaz con bases de datos MySQL. Los desarrolladores del lenguaje de programación PHP recomiendan usar MySQLi cuando se trata de versiones de servidor MySQL 4.1.3 y posteriores.

Vamos a crear una clase para utilizar desde pHp con métodos y propiedades para manipular o gestionar cualquier base de datos.

La clase sera la siguiente:
class dbmysqli{

//declaramos una variable para conexión

public $conexion;

//Declaramos el constructor de la clase

public function __construct($host, $usuario, $clave, $db){

     
}

//funcion para crear tablas

public function creartabla($sql){

}

//Guardar nuevos datos en la base de datos
public function insertar($tabla, $camposdatos){

}

//Borrar datos  de la base de datos
public function borrar($tabla, $camposdatos){

}

public function Actualizar($tabla, $camposset, $camposcondicion){
}

// funcion Buscar en una tabla

public function buscar($tabla, $campos){
}

}
MySQLi Conexión y la clase

Para conectar el servidor MySQLi debemos invocar al método constructor y enviar cuatro argumentos son los nombre de host como localhost, nombre de usuario, contraseña de base de datos y el nombre de base de datos.

En el contructor añadimos la conexión al servidor:
public function __construct($host, $usuario, $clave, $db)

{
  $this->conexion = new mysqli($host, $usuario, $clav);

     }
Luego lo invocaremos así:
// Conectando al servidor y a la base de datos

$conectadb = new dbmysqli("localhost","root","abc123"c,"Vehiculosdb");
Definimos el método para crear tablas en forma dinámica:
//Función que crea tablas

public function creartabla($sql) {

if ($this->conexion->query($sql) === TRUE) {

echo "Se ha creado una tabla";

  } else {

echo "Fallo:no se ha creado la tabla ".$this->conexion->error;

  }

}
Luego lo invocaremos así, creamos la consulta sql e invocamos la función creartabla():
$sql=”DROP TABLE IF EXISTS `clientes`; CREATE TABLE IF NOT EXISTS `clientes` (

  `idcliente` int(11) NOT NULL AUTO_INCREMENT,  `nombre` varchar(255) NOT NULL,
  PRIMARY KEY (`idcliente`))”

$conectadb ->creartabla($sql);
Vemos desde pHpMyAdmin como se ha creado la tabla al ejecutar el script php.

mysqli.jpg


Definimos el método para Insertar / grabar datos

A continuación creamos los métodos denominados ABM o CRUD, que seran los encargados de gestionar los dato0s de las tablas. Para enviar parámetros a cada método utilizaremos una matriz donde el índice de la matriz sera el campo de la tabla y el valor de ese índice sera el dato para el campo de la tabla. Cada nombre de índice debe expresarse entre comillas dobles y el valor de cumplir las reglas siguientes:
  • Los valores de cadena debe lleva comillas simples. Ejemplo “nombre” => 'Maria'
  • Los valores numéricos no deberán llevar comillas. Ejemplo “precio” => 10.50
  • La palabra NULL O vacíos no deberán llevar comillas. Ejemplo “precio” => NULL
//Creamos la función que tomara como parámetro la matriz campo => dato

public function insertar($tabla, $camposdatos){

                        //separamos los datos por si son varios

  $campo = implode(", ", array_keys($camposdatos));

  $i=0;
  foreach($camposdatos as $indice=>$valor) {

   $dato[$i] = "'".$valor."'";
      $i++;

  }

  $datos = implode(", ",$dato);

  //Insertamos los valores en cada campo

if($this->connection->query("INSERT INTO $tabla ($indice) VALUES ($dato)") === TRUE){
   echo "Nuevo cliente insertado";

  }else{
   echo "Fallo no se ha insertado el cliente ".$this->conexion->error;

  }

}
Creamos nuestra matriz con los datos que pueden provenir de un formulario:
//Matriz de datos a insertar
$clientes = array("nombre"=>'Carlos Moira', “nombre”=> 'Jose Triana', “nombre”=>'Julia Ordoñez' , “nombre”=> 'Carla Angelez' );
Luego lo invocaremos así, invocamos la función insertar(“clientes”,$clientes) y le añadimos los parámetros:
$conectadb ->insertar(“clientes”,$clientes) ;
Definimos el método para borrar datos

Para llevar a cabo la operación de borrado, declaramos una matriz donde indicaremos que fila o id se desea eliminar.
//funcion para eliminar datos de una tabla

public function borrar($tabla, $camposdatos) {

  $i=0;

  foreach($camposdatos as $indice=>$valor) {
   $dato[$i] = "'".$valor."'";

      $i++;
  }

  $campoydato = implode(" AND ",$dato);

  if($this->conexion->query("DELETE FROM $tabla WHERE $campoydato") === TRUE){

   if(mysqli_affected_rows($this->conexion)){
    echo "Registro eliminado";

   } else{
   echo "Fallo no se pudo eliminar el registro”.$this->conexion->error;

  }
}
Creamos nuestra matriz con los datos seleccionados a borrar que pueden provenir de un formulario
//Matriz de datos a eliminar

$clientesborrar = array("idcliente"=>1,”idcliente”=>50, “idcliente”=>8 , “idcliente”=> 104);
Luego lo invocaremos así, invocamos la función borrar(“clientes”,$clientesborrar) y le añadimos los parámetros
$conectadb ->borrar(“clientes”,$clientesborrar) ;
Definimos el método para actualizar datos

Para actualizar los datos de la fila que necesitemos modificar, declararemos dos matrices asociativas una será para los campos a modificar y la otra para la condición where en la consulta SQL. Las reglas de matriz deberán cumplir la misma sintaxis que definimos para la matriz desde el principio.

Teniendo en cuenta la sintaxis de update de MySQL:
UPDATE Clientes SET nombre='nuevonombre' WHERE idcliente.id=valorid;

//Creamos la función que tomara como parámetro la matriz campo => dato
public function Actualizar($tabla, $camposset, $camposcondicion){

  //separamos los valores SET a modificar

  $i=0;
  foreach($camposset as $indice=>$dato) {

   $datoset[$i] = $indice." = '".$dato."'";
      $i++;

  }

  $consultaset = implode(", ",$datoset);

  $i=0;

  foreach($camposcondicion as $indice=>$datocondicion) {
   $condicion[$i] = $indice." = '".$datocondicion."'";

      $i++;
  }

  $consultacondicion = implode(" AND ",$condicion);

//Actualización de registros

if($this->conexion->query("UPDATE $tabla SET $consultaset WHERE $consultacondicion") === TRUE){
   if(mysqli_affected_rows($this->conexion)){

    echo "Registro actualizado";
   }  else{

   echo "Fallo no se pudo eliminar el registro”.$this->conexion->error;
  }

}
Creamos nuestra matriz con los datos SET que sera los campos a actualizar y nuevos valores, también creamos una matriz para la condición WHERE con los id de los registros a actualizar que pueden provenir de un formulario:
//Matriz de datos SET

$clientesset = array("nombre"=>'Carlos Juan Dolfo', “nombre”=> 'Pedro Dorien Triana', “nombre”=>'Enrique Ordoñez' , “nombre”=> 'Carla Dolores Angeles' );

$clienteswhere= array("idcliente"=>1,”idcliente”=>2, “idcliente”=>5 , “idcliente”=> 10);
Luego lo invocaremos así, invocamos la función Actualizar(“clientes”,$clientesset,$clienteswhere) y le añadimos los parámetros.
$conectadb->Actualizar(“clientes”,$clientesset,$clienteswhere);
En todas las consultas utilizamos la función nativa de MySQLi para detectar errores $mysqli->error, que mostrará un mensaje de error para la cualquier consulta SQL o función de MySQLi que puede haberse ejecutado y fallado, así podremos saber porque se produjo el error.

Definimos el método para Buscar datos

Para obtener los datos de la tabla creamos un método de consulta con dos parámetros, uno es nombre de la tabla y otra es una matriz que contiene el nombre de las columnas y el que valor que se desea buscar.

Podemos indicar el tipo de matriz de resultado a obtener. Los valores posibles para este parámetro son las constantes MYSQLI_ASSOC, MYSQLI_NUM.


Matriz tipo MYSQLI_ASSOC
Array {
nombre => 'Carlos Juan Dolfo',

nombre”=>'Enrique Ordoñez'
}
Matriz tipo MYSQLI_NUM
Array {

0 => 'Carlos Juan Dolfo',

1=>'Enrique Ordoñez'

}

public function buscar($tabla, $campos){

$campos=implode(",",$campos);
  $resultado=$this->conexion->query("SELECT $campos FROM $tabla");

  return $resultado->fetch_all(MYSQLI_ASSOC);

}
Creamos nuestra matriz con los datos a buscar que pueden provenir de un formulario:
//Matriz de datos a buscar

$clientesbuscar = array("idcliente",”nombre”);
Luego lo invocaremos así, invocamos la función buscar(“clientes”,$clientesbuscar) y le añadimos los parámetros:
$conectadb ->buscar($tabla, $clientesbuscar);
Esta función devuelve un recorset que deberemos recorrer como una matriz para ver los datos de cada campo:

¿Te ayudó este Tutorial?


1 Comentarios

Buenas tardes, una pregunta en la funcion buscar como realizan esto: 

//Esta función devuelve un recorset que deberemos recorrer como una matriz para ver los datos de cada campo:

 

Eh estado intentando y me sale el error :call to a member function query() on a non-object mysqli

No esperes más y entra en Solvetic
Deja tus comentarios y aprovecha las ventajas de la cuenta de usuario ¡Únete!

X