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:
- Creare un handle non connesso con
mysqli_init(). - Impostare una o più opzioni con
mysqli_options(). - 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 damysqli_init()(non ancora connesso).$option— una delle costanti di opzioneMYSQLI_*(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
| Costante | Tipo di valore | Scopo |
|---|---|---|
MYSQLI_OPT_CONNECT_TIMEOUT | integer (secondi) | Tempo massimo di attesa durante l'apertura della connessione. |
MYSQLI_OPT_READ_TIMEOUT | integer (secondi) | Tempo massimo di attesa per il risultato di una query. |
MYSQLI_OPT_LOCAL_INFILE | 0 o 1 | Abilita o disabilita LOAD DATA LOCAL INFILE. |
MYSQLI_INIT_COMMAND | string | Un'istruzione SQL eseguita automaticamente dopo la connessione/riconnessione. |
MYSQLI_OPT_INT_AND_FLOAT_NATIVE | 0 o 1 | Restituisce 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 semplicemysqli_connect(). - SSL è separato. I percorsi di certificato, chiave e CA vengono configurati con
mysqli_ssl_set(), non conmysqli_options(). MYSQLI_OPT_LOCAL_INFILEè un'impostazione di sicurezza. Abilitala solo se hai effettivamente bisogno diLOAD DATA LOCAL INFILE; abilitarla può consentire a un server compromesso di leggere file locali.- Verifica il valore restituito.
mysqli_options()restituiscefalseper 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().