W3docs

Подробное руководство по функции 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() оставить для того, для чего она создана: переключения между базами данных в рамках одного подключения. Какой бы вариант вы ни использовали, всегда проверяйте булево возвращаемое значение, чтобы неудачный выбор не отправил ваши запросы не в ту базу данных.

Практика

Практика
Какова цель функции select_db() в PHP?
Какова цель функции select_db() в PHP?
Was this page helpful?