W3docs

Guida Completa alla Funzione mysqli_select_db in PHP

Scopri come usare mysqli_select_db() in PHP per cambiare il database attivo su una connessione MySQL esistente, con esempi pratici e casi d'uso.

La funzione mysqli_select_db() cambia il database predefinito (attivo) per una connessione MySQL esistente. Una volta selezionato un database, ogni query successiva eseguita su quella connessione — SELECT, INSERT, UPDATE e così via — punta a quel database, a meno che non si qualifichi completamente il nome di una tabella (es. other_db.users).

Nella maggior parte dei casi si imposta il database all'apertura della connessione con mysqli_connect(), e non si chiama mai mysqli_select_db(). Questa funzione trova il suo posto in una situazione specifica: quando una singola connessione deve lavorare con più di un database e si vuole cambiare quello attivo senza riconnettersi.

Questa guida spiega la sintassi, il valore di ritorno, quando si ha effettivamente bisogno della funzione e gli errori comuni da evitare.

Sintassi

mysqli_select_db(mysqli $connection, string $database): bool
ParametroDescrizione
$connectionIl link di connessione restituito da mysqli_connect(). Obbligatorio.
$databaseIl nome del database da impostare come predefinito per questa connessione.

Nello stile orientato agli oggetti, la stessa operazione è un metodo sull'oggetto di connessione:

$connection->select_db($database);

Valore di ritorno

mysqli_select_db() restituisce un valore booleano:

  • true — il database è stato selezionato con successo.
  • false — il database non esiste, l'utente non ha i permessi, oppure la connessione non è valida.

Poiché restituisce un booleano, è sempre necessario verificare il risultato invece di presumere il successo. In caso di errore, mysqli_error() fornisce il motivo.

Un esempio completo ed eseguibile

Il frammento seguente si connette senza specificare un database, poi ne seleziona uno esplicitamente ed esegue una query. Sostituisci le credenziali con le tue per eseguirlo su un server reale.

<?php

// 1. Connect WITHOUT choosing a database yet.
$connection = mysqli_connect('localhost', 'username', 'password');

if (!$connection) {
    die('Connection failed: ' . mysqli_connect_error());
}

// 2. Pick the database this connection should use.
if (mysqli_select_db($connection, 'shop')) {
    echo "Database 'shop' selected.\n";
} else {
    die("Could not select database: " . mysqli_error($connection));
}

// 3. Every query now runs against 'shop'.
$result = mysqli_query($connection, 'SELECT name FROM products LIMIT 1');

mysqli_close($connection);

Quando è davvero necessario

Di solito si passa il nome del database direttamente a mysqli_connect():

// The 4th argument selects the database immediately — no select_db() needed.
$connection = mysqli_connect('localhost', 'username', 'password', 'shop');

Ricorri a mysqli_select_db() solo quando devi cambiare database su una connessione aperta, ad esempio uno script di reporting che copia righe tra due database sullo stesso server:

<?php

$connection = mysqli_connect('localhost', 'username', 'password');

// Read from the live database.
mysqli_select_db($connection, 'live');
$rows = mysqli_query($connection, 'SELECT id, total FROM orders');

// Switch the same connection to the archive database and write there.
mysqli_select_db($connection, 'archive');
// ... insert $rows into archive.orders ...

mysqli_close($connection);

Cambiare database con mysqli_select_db() è meno costoso che aprire una seconda connessione, motivo per cui esiste questa funzione.

Errori comuni

  • Ignorare il valore di ritorno. Una selezione fallita lascia attivo il database precedente (o nessuno), quindi le query successive colpiranno silenziosamente le tabelle sbagliate. Verifica sempre il booleano.
  • Ordine degli argomenti errato. La connessione viene prima, il nome del database secondo: mysqli_select_db($connection, 'shop'). Invertirli è un errore frequente.
  • Confonderla con mysqli_connect(). select_db() non autentica né apre nulla — cambia soltanto il database predefinito di una connessione già esistente.
  • SQL injection da input utente. Il nome di un database è un identificatore e non può essere parametrizzato con un prepared statement. Non costruirlo mai da input utente grezzo; limitalo a un elenco fisso di nomi consentiti.

Funzioni correlate

Conclusione

mysqli_select_db() imposta il database predefinito per una connessione MySQL esistente. Preferisci selezionare il database direttamente in mysqli_connect(), e tieni mysqli_select_db() per il caso per cui è stata creata: cambiare database su una singola connessione. In entrambi i casi, verifica sempre il valore di ritorno booleano in modo che una selezione fallita non indirizzi mai le tue query al database sbagliato.

Pratica

Pratica
Qual è lo scopo della funzione select_db() in PHP?
Qual è lo scopo della funzione select_db() in PHP?
Was this page helpful?