Ver índice
La extensión MySQLi

        Ocultar índice  

   Índice de contenidos
   Instalación en Windows
   Instalación en Ubuntu
   Servidores seguros
   Páginas dinámicas
   Sintaxis básica
   Operaciones
   Arrays
   Formatos de presentación
   Operadores
   Bucles
   Extraer y ord. información
   Funciones
   Ficheros externos
   Imágenes dinámicas
   Gestión de directorios
   Cookies y sesiones
   Clases y objetos
   Ficheros en formato PDF
   Bases de datos MySQL
   PHP y XML
   PDO - Bases SQLite / MySQL
   MySQL a traves de misqli
   Algo de JavaScript y AJAX


La extensión MySQLI

Aunque no ofrece ninguna novedad respecto a otras interfaces de gestión de bases de datos MySQL mediante PHP, la extensión MySQLi, o como a veces se le conoce, la extensión de MySQL mejorada, viene incluida en las versiones PHP 5 y posteriores y se desarrolló para aprovechar las nuevas funcionalidades que incluyen las versiones de MySQL posteriores a la 4.1.3. Desde la página oficial de PHP se nos sugiere su uso argumentando que «Esta es la opción recomendada, ya que utilizando el controlador nativo de MySQL resulta en un mejor rendimiento y permite el acceso a funciones que no están disponibles cuando se utiliza la biblioteca de cliente MySQL. Comparada con la extensión MySQL ofrece las siguientes mejoras:

Conocido el manejo de las bases de datos MySQL y el manejo de las mismas mediante PDO o la librería mysql la utilización de esta nueva opción no va a plantearnos demasiadas dificultades. Lo iremos comprobando en los epígrafes siguientes.

Instalación y configuración de MySQLi

El uso del interface MySQLi requiere tener activa la extensión de PHP del mismo nombre.Bajo Windows, hemos de usar la extensión extension=php_mysqli.dll. Como siempre en estos casos, habremos de editar el fichero php.ini, buscar esa extensión, descomentarlarla (quitar el punto y coma que llevan delante), guardar los cambios y reiniciar el servidor.

Cuando se trata de Ubuntu es preciso realizar la siguiente instalación:


sudo apt-get install php5-mysqli

con lo cual, en cualquiera de los dos casos, una vez reiniciado el servidor la página http://localhost/info.php debería mostrarnos una información similar a esta:

Gestión de bases de datos MySQL mediante MySQLi

Cuando se utiliza esta librería existen dos posibilidades de gestión de las bases de datos MySQL o MariaDB. Por un lado, la gestión que podemos llamar «clásica» que guarda una gran similitud con la ya conocida de la gestión por procesos de MySQL y, como opción alternativa, el estilo «orientado a objetos» que ya hemos manejado al tratar del PDO.

En páginas anteriores hemos tratado ambos formas de proceder. Por ello en este caso intentaremos concretar –en paralelo – ambas formas de proceder. Interaremos ir describiendo ambas formas de sintaxis y los sucesivos epígrafes y trataremos también de ir desarrollando ejemplos, con los mismos resultados, en ambas modalidades de programación.

Creación de bases y/o acceso a bases de datos

MySQLi no es un servidor de bases de datos nuevo o distinto de MySQL. Es únicamente una extensión PHP para acceder a ese tipo de bases de datos. Por tanto, los elementos propios de MySQL: ficheros, tablas, tipos de datos, índices y sentencias son exactamente los ya comentados en las páginas cuyos enlaces hemos incluido en este párrafo.

Desarrollaremos todos los ejemplos atendiendo a la existencia de un fichero al que llamaremos mysqli.inc.php cuyo contenido es el siguiente:

<?php;
$cfg_servidor="localhost";
$cfg_usuario="pepe";
$cfg_password="pepa";
$cfg_basephp1="ejemplosMySQLi";
?>

De esta forma podremos automatizar el proceso de conexión y evitar repeticiones innecesarias de algunas líneas de código.

Conexión/desconexión al servidor de bases de datos MySQL

Estilo por procesos

La sintaxis no difiere demasiado de la ya conocida. Cunado utilizemos la programación mediante procesos la sintaxis será la clásica de MySQL utilizando ahora la función mysqli_connec en vez de mysql_connec. La instrucción sería:

$conexion= mysqli_connect(host,usuario, contraseña )

dónde $conexion es el identificador de la conexión y host, usuario y contraseña los respectivos nombres del servidor, usuario y contraseña que están recogidos en la variables incluidas en el fichero mysqli.inc.php al que hemos hecho alusión en párrafos anteriores.

Cuando se trata de cerrar la conexión es necesaria ejecutar mysqli_close de forma similar a la ya conocida. Ahora deberemos escribir:

mysqli_close($conexion)

Estilo orientado a objetos

$objeto= new mysqli ( servidor, usuario, contraseña )

dónde $objeto es el identificador de un nuevo objeto, y servidor, usuario y contraseña los respectivos nombres del servidor, usuario y contraseña que coinciden con las ya mencionadas variables incluidas en el fichero mysqli.inc.php.

El cierre de la conexión requiere invocar el método close() y por lo tanto escribir algo como:

$objeto->close()

Este es un ejemplo de utilización sucesiva de ambas modalidades de programación.

Ejecutar ejemplo Ver código fuente

Gestión de errores de conexión

Cuando se trata de mysqli la gestión de errores se realiza a dos niveles. Los errores de conexión utilizan recursos de diágnostico distintos de otros errores de utilización de MySQL. El código de error se identifica en el caso de la programación por procesos mediante la función: mysqli_connect_errno() y la descripción de ese error se objetiene mediante mysqli_connect_error().

Si estamos utilizando objetos los eventuales códigos de error de conexión y sus descripciones los obtendríamos de las propiedades $objeto->mysqli_connect_errno y span class="cursiva1">$objeto->mysqli_connect_error. Podrás observar que, a diferencia del caso de programación por procesos, aquí errorno y error no van seguidos de paréntesis.

Mediante procesos Ver código fuente Mediante objetos Ver código fuente

Creación de bases de datos y errores en sentencias

Las sentencias MySQL no difieren en absoluto de las ya comentadas para el caso de utilización de la librería mysql o del PDO. Por tanto son válidas las sentencias ya conocidas:

CREATE DATABASE nombre_de_la_base y CREATE DATABASE IF NOT EXISTS

La ejecución de estas sentencias requiere las siguientes sintaxis:

Estilo por procesos

Requiere haber realizado una conexión previa y su correspondiente identificador de conexión. En esas condiciones la instrucción PHP sería:

$sentencia=CREATE DATABASE nombre_de_la_base
mysqli_query($conexion, $sentencia)

o también

$sentencia=CREATE DATABASE IF NOT EXISTS nombre_de_la_base
mysqli_query($conexion, $sentencia)

en este último supuesto evitaríamos la generación de errores como consecuencia de intentar crear ya base de datos preexistente.

  ¡Cuidado!  

Fíjate en el orden en el que se incluyen los parámetros. En el caso de mysqli la función mysqli_query lleva como primer parámetro es el indentificador de conexión y la sentencia propiamente dicha se incluye en segundo lugar. Esto es justo lo inverso de lo utilizado cuando se trabaja con el interface mysql y la función mysql_query.

Estilo orientado a objetos

Cuando trabajemos bajo esta modalidad de programación se requerirá la creación previa de un objeto conexión a servidor y la ejecución de la sentencia MySQL a través del método query(). La sintaxis sería:

$sentencia=CREATE DATABASE nombre_de_la_base
$objeto->query($sentencia)

o también

$sentencia=CREATE DATABASE IF NOT EXISTS nombre_de_la_base
$objeto->query($sentencia)

Información sobre errores

La gestión de errores en la ejecución de sentencias es distinta a la ya comentada para las conexiones. En este nuevo supuesto los mensajes de error podremos optenerlos de la función mysqli_error($conexion) en el caso de procesos y cuando se trate de programación orientada a objetos usaremos la propiedad $objeto->error.

Cuando se trata de conocer los códigos de error habría que utilizar mysqli_errno($conexion) o $objeto->errno dependiendo del método de programación que estemos utilizando. En estos ejemplos tienes los procesos de creación de una base de datos y la gestión de esos errores.

Mediante procesos Ver código fuente Mediante objetos Ver código fuente

Borrar bases de datos MySQL

Estas sentencias tampoco difieren de las ya comentadas para el caso de utilización de la librería mysql o del PDO. Por tanto son válidas:

DROP DATABASE nombre_de_la_base y DROP DATABASE IFEXISTS

La ejecución de estas sentencias requiere las siguientes sintaxis:

Estilo por procesos

Requiere haber realizado una conexión previa y su correspondiente identificador de conexión. En esas condiciones la instrucción PHP sería:

$sentencia=DROP DATABASE nombre_de_la_base
mysqli_query($conexion, $sentencia)

o también

$sentencia=DROP DATABASE IF EXISTS nombre_de_la_base
mysqli_query($conexion, $sentencia)

en este último supuesto evitaríamos la generación de errores como consecuencia de intentar borrar una base de datos inexistente.

Estilo por procesos

Una vez dispongamos un objeto conexión a servidor la ejecución de la sentencia MySQL a través del método query(). La sintaxis sería:

$sentencia=DROP DATABASE nombre_de_la_base
$objeto->query($sentencia)

o también

$sentencia=DROP DATABASE IF EXISTS nombre_de_la_base
$objeto->query($sentencia)
Mediante procesos Ver código fuente Mediante objetos Ver código fuente

Base de datos ejemplos

Utilizaremos una nueva base de datos con nombre ejemplosMySQLi nombre coincidente con el que hemos asignado a la variable $cfg_basephp1 en el fichero mysqli.inc.php. Como es lógico resulta indiferente utilizar cualquiera de los métodos de desarrollo del script. Tanto utilzando procesos como por medio de objetos el resultado sería idéntico.

Ver código fuente