W3docs

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:

  1. Crear un identificador no conectado con mysqli_init().
  2. Establecer una o más opciones con mysqli_options().
  3. 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 por mysqli_init() (aún no conectado).
  • $option — una de las constantes de opción MYSQLI_* (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

ConstanteTipo de valorPropósito
MYSQLI_OPT_CONNECT_TIMEOUTentero (segundos)Tiempo máximo de espera al abrir la conexión.
MYSQLI_OPT_READ_TIMEOUTentero (segundos)Tiempo máximo de espera para el resultado de una consulta.
MYSQLI_OPT_LOCAL_INFILE0 o 1Habilitar o deshabilitar LOAD DATA LOCAL INFILE.
MYSQLI_INIT_COMMANDstringUna sentencia SQL que se ejecuta automáticamente después de conectar/reconectar.
MYSQLI_OPT_INT_AND_FLOAT_NATIVE0 o 1Devolver 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 simple mysqli_connect().
  • SSL es aparte. Las rutas de certificado, clave y CA se configuran con mysqli_ssl_set(), no con mysqli_options().
  • MYSQLI_OPT_LOCAL_INFILE es una configuración de seguridad. Solo habilítala si realmente necesitas LOAD DATA LOCAL INFILE; habilitarla puede permitir que un servidor comprometido lea archivos locales.
  • Verifica el valor de retorno. mysqli_options() devuelve false para 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().

Práctica

Práctica
¿Qué secuencia aplica correctamente las opciones antes de abrir una conexión MySQLi?
¿Qué secuencia aplica correctamente las opciones antes de abrir una conexión MySQLi?
Was this page helpful?