Guide complet sur la fonction mysqli_select_db en PHP
Découvrez la fonction mysqli_select_db() en PHP : syntaxe, valeur de retour, cas d'usage et erreurs courantes à éviter avec les bases de données MySQL.
La fonction mysqli_select_db() change la base de données par défaut (active) d'une connexion MySQL existante. Une fois une base de données sélectionnée, chaque requête ultérieure exécutée sur cette connexion — SELECT, INSERT, UPDATE, etc. — cible cette base de données, sauf si vous qualifiez entièrement un nom de table (par ex. other_db.users).
La plupart du temps, vous définissez la base de données lors de l'ouverture de la connexion avec mysqli_connect(), et vous n'appelez jamais mysqli_select_db(). Cette fonction trouve son utilité dans une situation précise : lorsqu'une connexion unique doit fonctionner avec plusieurs bases de données et que vous souhaitez changer la base active sans vous reconnecter.
Ce guide explique la syntaxe, la valeur de retour, les cas où vous avez réellement besoin de la fonction et les erreurs courantes à éviter.
Syntaxe
mysqli_select_db(mysqli $connection, string $database): bool| Paramètre | Description |
|---|---|
$connection | Le lien de connexion retourné par mysqli_connect(). Requis. |
$database | Le nom de la base de données à définir comme base par défaut pour cette connexion. |
En style orienté objet, la même opération est une méthode sur l'objet de connexion :
$connection->select_db($database);Valeur de retour
mysqli_select_db() retourne un boolean :
true— la base de données a été sélectionnée avec succès.false— la base de données n'existe pas, l'utilisateur n'a pas les permissions, ou la connexion est invalide.
Puisqu'elle retourne un boolean, vérifiez toujours le résultat plutôt que de supposer le succès. En cas d'échec, mysqli_error() vous donne la raison.
Un exemple complet et exécutable
L'extrait ci-dessous se connecte sans nommer de base de données, puis en sélectionne une explicitement et exécute une requête contre elle. Remplacez les identifiants par les vôtres pour l'exécuter sur un vrai serveur.
<?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);Quand en avez-vous réellement besoin
Vous passez généralement le nom de la base de données directement à mysqli_connect() :
// The 4th argument selects the database immediately — no select_db() needed.
$connection = mysqli_connect('localhost', 'username', 'password', 'shop');Utilisez mysqli_select_db() uniquement lorsque vous devez basculer entre des bases de données sur une connexion ouverte, par exemple un script de reporting qui copie des lignes entre deux bases de données sur le même serveur :
<?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);Basculer avec mysqli_select_db() est moins coûteux qu'ouvrir une deuxième connexion, d'où l'existence de cette fonction.
Erreurs courantes
- Ignorer la valeur de retour. Une sélection échouée laisse la base de données précédente active (ou aucune), donc les requêtes ultérieures ciblent silencieusement les mauvaises tables. Branchez toujours sur le boolean.
- Mauvais ordre des arguments. La connexion vient en premier, le nom de la base de données en second :
mysqli_select_db($connection, 'shop'). Les inverser est une erreur fréquente. - La confondre avec
mysqli_connect().select_db()n'authentifie pas et n'ouvre rien — elle ne fait que changer la base de données par défaut d'une connexion qui existe déjà. - Injection SQL depuis une entrée utilisateur. Un nom de base de données est un identifiant et ne peut pas être paramétré avec une requête préparée. Ne le construisez jamais à partir d'une entrée utilisateur brute ; limitez-le à une liste blanche fixe de noms connus.
Fonctions associées
mysqli_connect()— ouvrir une connexion (et éventuellement sélectionner une base de données en une étape).mysqli_query()— exécuter du SQL contre la base de données actuellement sélectionnée.mysqli_fetch_assoc()— lire les lignes de résultats sous forme de tableaux associatifs.- Aperçu de PHP MySQLi — l'extension mysqli complète en un coup d'œil.
Conclusion
mysqli_select_db() définit la base de données par défaut pour une connexion MySQL existante. Préférez sélectionner la base de données directement dans mysqli_connect(), et réservez mysqli_select_db() au cas pour lequel elle a été conçue : basculer entre des bases de données sur une connexion unique. Quelle que soit votre approche, vérifiez toujours la valeur de retour boolean afin qu'un échec de sélection n'envoie jamais vos requêtes vers la mauvaise base de données.