Подробное руководство по функции mysqli_select_db в PHP
Функция mysqli_select_db() меняет базу данных по умолчанию для существующего подключения MySQL. Узнайте синтаксис, примеры использования и типичные ошибки.
Функция mysqli_select_db() меняет базу данных по умолчанию (активную) для существующего подключения MySQL. После выбора базы данных все последующие запросы, выполняемые через это подключение — SELECT, INSERT, UPDATE и другие — будут обращаться именно к ней, если только вы не укажете полное имя таблицы (например, other_db.users).
В большинстве случаев база данных задаётся при открытии подключения с помощью mysqli_connect(), и вызывать mysqli_select_db() не нужно вовсе. Эта функция незаменима в одной конкретной ситуации: когда одно подключение должно работать с несколькими базами данных и нужно переключаться между ними без повторного подключения.
В этом руководстве описан синтаксис, возвращаемое значение, случаи реального применения функции и типичные ошибки, которых следует избегать.
Синтаксис
mysqli_select_db(mysqli $connection, string $database): bool| Параметр | Описание |
|---|---|
$connection | Ссылка на подключение, возвращаемая mysqli_connect(). Обязательный. |
$database | Имя базы данных, которую нужно сделать активной для данного подключения. |
В объектно-ориентированном стиле та же операция выполняется как метод объекта подключения:
$connection->select_db($database);Возвращаемое значение
mysqli_select_db() возвращает булево значение:
true— база данных успешно выбрана.false— база данных не существует, у пользователя нет прав доступа, или подключение недействительно.
Поскольку функция возвращает булево значение, всегда проверяйте результат вместо того, чтобы предполагать успех. В случае ошибки функция mysqli_error() сообщит причину.
Полный рабочий пример
Фрагмент ниже устанавливает подключение без указания базы данных, затем явно выбирает её и выполняет запрос. Замените учётные данные своими, чтобы запустить пример на реальном сервере.
<?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);Когда функция действительно нужна
Обычно имя базы данных передаётся напрямую в mysqli_connect():
// The 4th argument selects the database immediately — no select_db() needed.
$connection = mysqli_connect('localhost', 'username', 'password', 'shop');Используйте mysqli_select_db() только тогда, когда нужно переключаться между базами данных в рамках одного открытого подключения — например, в скрипте для создания отчётов, который копирует строки между двумя базами данных на одном сервере:
<?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);Переключение с помощью mysqli_select_db() обходится дешевле, чем открытие второго подключения — именно для этого она и существует.
Типичные ошибки
- Игнорирование возвращаемого значения. Неудачный выбор оставляет активной предыдущую базу данных (или вообще никакой), из-за чего последующие запросы незаметно обращаются к неверным таблицам. Всегда проверяйте булево значение.
- Неверный порядок аргументов. Подключение идёт первым, имя базы данных — вторым:
mysqli_select_db($connection, 'shop'). Перестановка аргументов — частая ошибка. - Путаница с
mysqli_connect().select_db()не выполняет аутентификацию и не открывает соединений — она лишь меняет базу данных по умолчанию для уже существующего подключения. - SQL-инъекция через пользовательский ввод. Имя базы данных является идентификатором и не может быть параметризовано с помощью подготовленного запроса. Никогда не формируйте его из сырого пользовательского ввода; ограничьтесь фиксированным списком допустимых имён.
Связанные функции
mysqli_connect()— открытие подключения (с возможностью одновременного выбора базы данных).mysqli_query()— выполнение SQL-запроса к текущей выбранной базе данных.mysqli_fetch_assoc()— чтение строк результата в виде ассоциативных массивов.- Обзор PHP MySQLi — расширение mysqli в целом.
Заключение
mysqli_select_db() задаёт базу данных по умолчанию для существующего подключения MySQL. Предпочтительнее выбирать базу данных непосредственно в mysqli_connect(), а mysqli_select_db() оставить для того, для чего она создана: переключения между базами данных в рамках одного подключения. Какой бы вариант вы ни использовали, всегда проверяйте булево возвращаемое значение, чтобы неудачный выбор не отправил ваши запросы не в ту базу данных.