W3docs

mysqli_options()

Scopri come mysqli_options() imposta opzioni di connessione aggiuntive in PHP, come timeout e LOCAL INFILE, prima di aprire una connessione MySQLi.

La funzione mysqli_options() imposta opzioni di connessione aggiuntive che regolano il modo in cui PHP comunica con MySQL. Questa guida spiega cosa fa ogni opzione comune, la regola rigorosa su quando è possibile chiamarla e come combinarla con mysqli_real_connect() in una sequenza di connessione reale.

Introduzione alla funzione mysqli_options()

mysqli_options() configura il comportamento di un handle di connessione MySQLi prima che la connessione venga aperta. È l'equivalente procedurale del metodo orientato agli oggetti mysqli::options().

La cosa fondamentale da capire è l'ordine delle operazioni. Una normale chiamata mysqli_connect() sia crea l'handle che lo connette in un unico passaggio, senza lasciare spazio per impostare le opzioni. Per utilizzare mysqli_options() è necessario separare questi due passaggi:

  1. Creare un handle non connesso con mysqli_init().
  2. Impostare una o più opzioni con mysqli_options().
  3. Aprire la connessione effettiva con mysqli_real_connect().

Impostare un'opzione dopo che la connessione è già stabilita può non avere effetto o fallire, a seconda dell'opzione.

Sintassi

mysqli_options(mysqli $mysql, int $option, mixed $value): bool
  • $mysql — un handle di connessione restituito da mysqli_init() (non ancora connesso).
  • $option — una delle costanti di opzione MYSQLI_* (vedi sotto).
  • $value — il valore per quell'opzione; il tipo atteso dipende dall'opzione.

La funzione restituisce true in caso di successo e false in caso di errore.

Costanti di opzione comuni

CostanteTipo di valoreScopo
MYSQLI_OPT_CONNECT_TIMEOUTinteger (secondi)Tempo massimo di attesa durante l'apertura della connessione.
MYSQLI_OPT_READ_TIMEOUTinteger (secondi)Tempo massimo di attesa per il risultato di una query.
MYSQLI_OPT_LOCAL_INFILE0 o 1Abilita o disabilita LOAD DATA LOCAL INFILE.
MYSQLI_INIT_COMMANDstringUn'istruzione SQL eseguita automaticamente dopo la connessione/riconnessione.
MYSQLI_OPT_INT_AND_FLOAT_NATIVE0 o 1Restituisce colonne integer e float come tipi PHP nativi (solo mysqlnd).

Come utilizzare la funzione mysqli_options()

L'esempio seguente inizializza un handle, imposta un timeout di connessione e abilita il caricamento di file locali, quindi apre la connessione:

<?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";
?>

Qui creiamo prima un handle non connesso con mysqli_init(), configuriamo il timeout e il comportamento del file locale con mysqli_options(), e solo allora ci connettiamo con mysqli_real_connect(). Il risultato della connessione viene verificato con mysqli_connect_error(), che restituisce una descrizione dell'ultimo errore di connessione.

Eseguire un comando subito dopo la connessione

MYSQLI_INIT_COMMAND è utile quando ogni connessione deve iniziare in uno stato noto — ad esempio forzando un set di caratteri di sessione o un fuso orario. L'istruzione viene eseguita dopo ogni connessione e riconnessione:

<?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());
}
?>

Errori comuni

  • Chiamarla prima della connessione. Questo è l'errore più frequente. Usa mysqli_init() + mysqli_options() + mysqli_real_connect(), mai il semplice mysqli_connect().
  • SSL è separato. I percorsi di certificato, chiave e CA vengono configurati con mysqli_ssl_set(), non con mysqli_options().
  • MYSQLI_OPT_LOCAL_INFILE è un'impostazione di sicurezza. Abilitala solo se hai effettivamente bisogno di LOAD DATA LOCAL INFILE; abilitarla può consentire a un server compromesso di leggere file locali.
  • Verifica il valore restituito. mysqli_options() restituisce false per opzioni non supportate, quindi vale la pena verificarlo quando un'opzione non ha silenziosamente alcun effetto.

Conclusione

mysqli_options() consente di ottimizzare una connessione MySQLi — timeout, caricamento di file locali e comandi di avvio — ma solo all'interno della sequenza mysqli_init()mysqli_options()mysqli_real_connect(). Per continuare con le connessioni MySQLi, consulta mysqli_connect() e come diagnosticare i problemi con mysqli_connect_error().

Esercitazione

Pratica
Quale sequenza applica correttamente le opzioni prima di aprire una connessione MySQLi?
Quale sequenza applica correttamente le opzioni prima di aprire una connessione MySQLi?
Was this page helpful?