Conexión a MySQL desde PHP con MySQLi

Categories:

De manera general podemos realizar una conexión de PHP a MySQL en cuatro pasos.

  1. Abrir conexión.
  2. Ejecutar sentencia SQL.
  3. Procesar resultado de la sentencia.
  4. Cerrar conexión.

Existen diferentes extensiones para conectar PHP a una base de datos MySQL.
En este caso vamos a utilizar mysqli en modo orientado a objetos.

Nota:
La extensión ext/mysql está obsoleta:
“Esta extensión está obsoleta a partir de PHP 5.5.0, por lo que ha sido eliminada a partir de PHP 7.0.0. …” http://www.php.net/manual/es/intro.mysql.php

Si encuentran tutoriales que utilicen esta extensión – ext/mysql – que tengan sentencias tales como: mysql_connect mysql_select_db mysql_query mysql_fetch_array mysql_close o que comiencen con mysql_* es mejor que no los utilicen.

Solo es conveniente revisarlos en el caso en que tengan una aplicación existente que requieran actualizar – o trabajar con ella – (no estaría de más que piensen en actualizarla).

Abrir conexión.

<?php
/* 
Para crear una conexión necesitamos el servidor donde está alojada la base de datos, y las credenciales - usuario / contraseña - que se utilizan para tener acceso a la base de datos. 

  $conexion = new mysqli("servidor", "usuario", "contraseña", "base-de-datos");
*/

    $conexion = new mysqli("127.0.0.1", "root", "", "tutoriales");

/*
  Declaraciones para asegurar que los datos enviados / recibidos entre PHP y MySQL sean en UTF8. 
*/
  
    $conexion->query("SET NAMES utf8");
    $conexion->query("SET CHARACTER SET utf8");

/* 
  Utilizar utf8mb4 si así están definidas las tablas / columnas. 

  $conexion->query("SET NAMES utf8mb4");
  $conexion->query("SET CHARACTER SET utf8mb4");

*/

?>

Ejecutar sentencia SQL.

<?php
/* 
Este paso prefiero hacerlo en dos partes para tener una visualización más clara del proceso.

  a. Creamos una variable '$query' donde almacenamos la sentencia SQL que nos interesa ejecutar. 

     $query = "SELECT nombre FROM usuarios";    

  b. En el objeto de la conexión ejecutamos el método 'query' - $conexion->query() -.
     Utilizamos la variable $query como parámetro del método $conexion->query - Este se encarga de enviar la sentencia a MySQL -.

     $conexion->query($query);

  c. Creamos una variable '$resultados' para guardar el resultado de la instrucción.

     $resultados = $conexion->query($query);  
    
*/

    $query = "SELECT nombre FROM usuarios";
    $resultados = $conexion->query($query);

?>

Procesar resultado de la sentencia.

<?php
/*
En este caso vamos a utilizar fetch_array para procesar resultado de la instrucción.

    $resultados->fetch_array();

Elegí fetch_array es porque este método es muy flexible ya que presenta los resultados obtenidos de la consulta como arreglo.

Para poder visualizar los resultados hacemos un ciclo para visualizar cada elemento.
    
    while ($resultado = $resultados->fetch_array()) { ... }
    
Mientras haya resultados, por cada iteración, almacenamos el resultado correspondiente a esa iteración en la variable $resultado.

En esta variable - $resultado - podemos obtener cada uno de los valores devueltos por la consulta con el nombre de la columna.

En este caso vamos a mostrar el nombre del usuario.  
*/

    while ($resultado = $resultados->fetch_array()) {
    		echo $resultado["nombre"] . "<br>";
    }	
?>

Cerrar conexión.

<?php
/*
 Este paso es opcional.
  La conexión a MySQL se cierra automáticamente al terminar de evaluarse el script de PHP en el cual se utiliza la conexión. 
*/
    $conexion->close();

?>

Todo el proceso en un script.

<?php
/* 
  Abrir conexión asegurando que los datos enviados / recibidos son utf8
*/
  $conexion = new mysqli("127.0.0.1", "root", "", "tutoriales");
  $conexion->query("SET NAMES utf8");
  $conexion->query("SET CHARACTER SET utf8");

/* 
  Ejecutar sentencia SQL
*/

  $query = "SELECT nombre FROM usuarios";
  $resultados = $conexion->query($query);

/*
  Procesar resultado
*/

  while ($resultado = $resultados->fetch_array()) {
  		echo $resultado["nombre"] . "<br>";
  }	

/*
  Cerrar conexión
*/
    $conexion->close();
?>