mysqli_options()
Aprende cómo la función PHP mysqli_options() establece opciones de conexión extra, como tiempos de espera y LOCAL INFILE, antes de abrir una conexión MySQLi.
La función mysqli_options() establece opciones de conexión adicionales que ajustan cómo PHP se comunica con MySQL. Esta guía explica qué hace cada opción común, la regla estricta sobre cuándo puedes llamarla, y cómo combinarla con mysqli_real_connect() en una secuencia de conexión real.
Introducción a la función mysqli_options()
mysqli_options() configura el comportamiento de un identificador de conexión MySQLi antes de que se abra la conexión. Es el equivalente procedimental del método orientado a objetos mysqli::options().
Lo clave que hay que entender es el orden de las operaciones. Una llamada normal a mysqli_connect() tanto crea el identificador como lo conecta en un solo paso, sin dejar espacio para establecer opciones. Para usar mysqli_options() debes separar esos dos pasos:
- Crear un identificador no conectado con
mysqli_init(). - Establecer una o más opciones con
mysqli_options(). - Abrir la conexión real con
mysqli_real_connect().
Establecer una opción después de que la conexión ya está establecida no tiene ningún efecto o falla, dependiendo de la opción.
Sintaxis
mysqli_options(mysqli $mysql, int $option, mixed $value): bool$mysql— un identificador de conexión devuelto pormysqli_init()(aún no conectado).$option— una de las constantes de opciónMYSQLI_*(ver más abajo).$value— el valor para esa opción; el tipo esperado depende de la opción.
La función devuelve true en caso de éxito y false en caso de fallo.
Constantes de opción comunes
| Constante | Tipo de valor | Propósito |
|---|---|---|
MYSQLI_OPT_CONNECT_TIMEOUT | entero (segundos) | Tiempo máximo de espera al abrir la conexión. |
MYSQLI_OPT_READ_TIMEOUT | entero (segundos) | Tiempo máximo de espera para el resultado de una consulta. |
MYSQLI_OPT_LOCAL_INFILE | 0 o 1 | Habilitar o deshabilitar LOAD DATA LOCAL INFILE. |
MYSQLI_INIT_COMMAND | string | Una sentencia SQL que se ejecuta automáticamente después de conectar/reconectar. |
MYSQLI_OPT_INT_AND_FLOAT_NATIVE | 0 o 1 | Devolver columnas enteras y flotantes como tipos nativos de PHP (solo mysqlnd). |
Cómo usar la función mysqli_options()
El ejemplo siguiente inicializa un identificador, establece un tiempo de espera de conexión y habilita la carga de archivos locales, luego abre la conexión:
<?php
$mysqli = mysqli_init();
/* Set connection timeout to 10 seconds */
mysqli_options($mysqli, MYSQLI_OPT_CONNECT_TIMEOUT, 10);
/* Enable LOAD DATA LOCAL INFILE */
mysqli_options($mysqli, MYSQLI_OPT_LOCAL_INFILE, 1);
/* Now open the actual connection */
if (!mysqli_real_connect($mysqli, "localhost", "username", "password", "database")) {
die("Connection failed: " . mysqli_connect_error());
}
echo "Connected successfully";
?>Aquí primero creamos un identificador no conectado con mysqli_init(), configuramos el tiempo de espera y el comportamiento de archivos locales con mysqli_options(), y solo entonces conectamos con mysqli_real_connect(). El resultado de la conexión se verifica con mysqli_connect_error(), que devuelve una descripción del último fallo de conexión.
Ejecutar un comando justo después de conectar
MYSQLI_INIT_COMMAND es útil cuando cada conexión debe comenzar en un estado conocido — por ejemplo, forzando un juego de caracteres de sesión o zona horaria. La sentencia se ejecuta después de cada conexión y reconexión:
<?php
$mysqli = mysqli_init();
mysqli_options($mysqli, MYSQLI_INIT_COMMAND, "SET NAMES 'utf8mb4'");
if (!mysqli_real_connect($mysqli, "localhost", "username", "password", "database")) {
die("Connection failed: " . mysqli_connect_error());
}
?>Errores comunes
- Llámala antes de conectar. Este es el error más frecuente. Usa
mysqli_init()+mysqli_options()+mysqli_real_connect(), nunca el simplemysqli_connect(). - SSL es aparte. Las rutas de certificado, clave y CA se configuran con
mysqli_ssl_set(), no conmysqli_options(). MYSQLI_OPT_LOCAL_INFILEes una configuración de seguridad. Solo habilítala si realmente necesitasLOAD DATA LOCAL INFILE; habilitarla puede permitir que un servidor comprometido lea archivos locales.- Verifica el valor de retorno.
mysqli_options()devuelvefalsepara opciones no soportadas, por lo que vale la pena verificarlo cuando una opción no tiene ningún efecto silenciosamente.
Conclusión
mysqli_options() te permite ajustar con precisión una conexión MySQLi — tiempos de espera, carga de archivos locales y comandos de inicio — pero solo dentro de la secuencia mysqli_init() → mysqli_options() → mysqli_real_connect(). Para continuar con las conexiones MySQLi, consulta mysqli_connect() y cómo diagnosticar fallos con mysqli_connect_error().