La extensión MySQLi en PHP

mysqli

¿Que es MySQLi?

MySQLi es la extensión de MySQL mejorada.
Esta es la opción recomendada, extiende y mejora las en todos los aspectos al API original de MySQL de PHP que ya esta obsoleta. Comparada con el API de MySQL original ofrece las siguientes mejoras:

  • Interfaz orientada a objetos y procedimental
  • Soporte para sentencias preparadas
  • Soporte para múltiples sentencias
  • Soporte para transacciones
  • Mejoradas las opciones de depuración
  • Muchas mas funcionalidades disponibles
  • Soporte para procedimientos almacenados (PL/SQL)
  • Mayor seguridad
  • Mayor comodidad

En la propia web oficial de PHP se recomienda utilizar el API MySQLi en lugar del API MySQL tradicional.

Si programamos PHP Orientado a objetos MySQLi cuenta con interfaz orientada a objetos, es decir, nos permite llamar a métodos de MySQLi con la típica flechita -> de esta forma sentiremos una mayor comodidad, fluidez y limpieza de código a la hora de trabajar con bases de datos en PHP.

Si trabajamos con programación procedimental(obsoleta) en PHP no tendremos problema para usar MySQLi ya que cuenta con una interfaz procedimental, se usa de una forma muy similar al API tradicional de MySQL.

¿Que API elegir para trabajar con MySQL en PHP? en php.net

En Linux debemos instalarla con el siguiente comando:

sudo apt-get install php5-mysqli

En Windows ya nos vendrá instalada en nuestro Wamp, Xampp, AppServer o el paquete servidor de aplicaciones web que tengamos instalado.

¿Como usar MySQLi?

Los métodos que mas frecuentemente se usan son los siguientes:

Realiza una conexión a la base de datos.

$conexion=new mysqli('servidor','usuario','contraseña','base de datos');

Ejecuta una consulta en la base de datos.

$conexion->query('CONSULTA SQL'); 

Junto a un bucle while sirve para recorrer los resultados de la consulta.

$consulta->fetch_assoc(); 

Devuelve el número de filas de un conjunto de resultados de una sentencia.

$consulta->num_rows;

Devuelve el error de la consulta.

$consulta->error; 

Devuelve el error en la conexión a la base de datos.

$conexion->error; 

 

Ejemplo de interacción con la base de datos explicado exhaustivamente:

# class.php

<?php
class Conectar{
	//Creamos un método estático que no necesita ser instanciado
	public static function conexion(){
	
	//new mysqli creamos o instanciamos el objeto mysqli
	//new mysqli('servidor','usuario','contraseña','nombre de la BD');
		$conexion=new mysqli("localhost", "root", "", "empresa");
	        
       //llamamos a la conexión y hacemos una consulta para utilizar UTF-8
		$conexion->query("SET NAMES 'utf8'"); 

       //devolvemos la conexión para que pueda ser utilizada en otros métodos
		return $conexion; 
	}
}

class Productos{
 private $db;	     //atributo que almacena la conexión a la BD
 private $productos; //propiedad que almacenara los resultados de la BD
 
	public function __construct(){
	   $this->productos=array(); //Le decimos que sea un array 
	   $this->db=Conectar::conexion(); //Almacenamos en db la llamada la clase estática Conectar
	}
	
	public function get_productos(){
		//hacemos una consulta
		$consulta=$this->db->query("select * from productos;");
		
	//recorremos el resultado con while y el método fetch_assoc
/*la diferencia entre fetch_assoc y fetch_array es que fetch_assoc te permite hacer SOLO arrays asociativos */
		while($filas=$consulta->fetch_assoc()){
          //metemos cada fila de la tabla (que son arrays) dentro del array productos
			$this->productos[]=$filas; 
		}

	return $this->productos; //devolvemos el array que trataremos en la vista
	}
}
?>

# index.php

<?php
/*para que el programa funcione requerimos obligatoriamente 
y de forma estricta que se incluya el fichero class.php*/
require_once("class.php"); 
?>
<!DOCTYPE HTML>
<html lang="es">
<head>
	<meta charset="utf-8"/>
	<title>MySQLi PHP</title>
</head>
<body>
<?php
	$productos=new Productos(); //instanciamos el objeto Productos

        /*llamamos al método get_productos() dentro de una variable 
        que ahora sera el array asociativo devuelto por este método*/
	$producto=$productos->get_productos();

        /*Comprobamos si $i es menor que la longitud del array $producto entonces ve sumando uno a $i*/	
	for($i=0;$i<sizeof($producto);$i++){
		echo $producto[$i]["DESCRIPCION"]."<br/>";
	}
        /*En cada iteración pasa por la primera dimensión y coloca $i y 
        en la segunda dimensión consigue el la fila de la columna DESCRIPCION 
        de la base de datos. */
?>
</body>
</html>

Más información sobre MySQLi y su uso.

Victor

Autor: Victor

Desarrollador web - Formador online - Blogger

Compartir este post

2 Comentarios

  1. Hola amigo, como puedo hacer en tu ejemplo para cerrar la conexion

    Responder
    • La conexión se cierra de forma automática cuando se acaban de realizar las operaciones, no es necesario estar cerrándola cada dos por tres. Pero se podría hacer con el método close de MySQLi, en el ejemplo seria $this->db->close();

      Responder

Poner un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *