5.4.58 mysql_real_connect()
MYSQL *
mysql_real_connect(MYSQL *mysql,
const char *host,
const char *user,
const char *passwd,
const char *db,
unsigned int port,
const char *unix_socket,
unsigned long client_flag)
Описание
mysql_real_connect() — это синхронная функция. Её асинхронный аналог — mysql_real_connect_nonblocking(), предназначенный для приложений, требующих асинхронного взаимодействия с сервером. См. Главу 7, C API Асинхронный интерфейс.
Для подключения с использованием записи DNS SRV используйте mysql_real_connect_dns_srv(). См. Раздел 5.4.59, «mysql_real_connect_dns_srv()».
mysql_real_connect() пытается установить соединение с сервером MySQL, работающим на host. Программы-клиенты должны успешно подключиться к серверу перед выполнением любых других функций API, требующих корректного обработчика соединения MYSQL.
Укажите аргументы следующим образом:
В качестве первого аргумента укажите адрес существующей структуры
MYSQL. Перед вызовомmysql_real_connect()вызовитеmysql_init()для инициализации структурыMYSQL. Вы можете изменить множество параметров подключения с помощью вызоваmysql_options(). См. Раздел 5.4.54, «mysql_options()».-
Значение
hostможет быть именем хоста или IP-адресом. Клиент пытается подключиться следующим образом:-
Если
hostравноNULLили строке"localhost", предполагается подключение к локальному хосту:В Windows клиент подключается с использованием соединения с общей памятью, если сервер поддерживает соединения с общей памятью.
В Unix клиент подключается с использованием файла сокета Unix. Имя сокета можно указать с помощью аргумента
unix_socketили переменной окруженияMYSQL_UNIX_PORT.
В Windows, если
hostравно".", или TCP/IP не включен и не указанunix_socketили хост пуст, клиент подключается через именованную трубу, если сервер поддерживает именованные соединения через трубы. Если они не поддерживаются, произойдёт ошибка.В противном случае используется TCP/IP.
Вы также можете повлиять на тип соединения с помощью параметров
MYSQL_OPT_PROTOCOLилиMYSQL_OPT_NAMED_PIPEдляmysql_options(). Тип соединения должен поддерживаться сервером. -
Аргумент
userсодержит идентификатор пользователя MySQL. ЕслиuserравноNULLили пустой строке"", предполагается текущий пользователь. В Unix это текущее имя входа. В Windows ODBC текущее имя пользователя нужно указать явно. См. раздел Connector/ODBC.-
Аргумент
passwdсодержит пароль дляuser. ЕслиpasswdравноNULL, проверяются только записи в таблицеuserдля пользователя, у которого поле пароля пустое. Это позволяет администратору базы данных настроить систему привилегий MySQL таким образом, что пользователи получают разные права в зависимости от того, указан ли пароль.ПримечаниеНе пытайтесь зашифровать пароль перед вызовом
mysql_real_connect(); шифрование пароля выполняется автоматически API-клиентом. Аргументы
userиpasswdиспользуют кодировку символов, настроенную для объектаMYSQL. По умолчанию этоutf8mb4, но может быть изменено вызовомmysql_options(mysql, MYSQL_SET_CHARSET_NAME, "до подключения.charset_name")db— имя базы данных. Еслиdbне равноNULL, подключение устанавливает базу данных по умолчанию на это значение.Если
portне равно 0, значение используется в качестве номера порта для TCP/IP соединения. Обратите внимание, что аргументhostопределяет тип соединения.Если
unix_socketне равноNULL, строка указывает сокет или именованную трубу для использования. Обратите внимание, что аргументhostопределяет тип соединения.-
Значение
client_flagобычно равно 0, но может быть установлено в комбинацию флагов для активации определённых функций:CAN_HANDLE_EXPIRED_PASSWORDS: Клиент может обрабатывать истекшие пароли. Для получения дополнительной информации см.CLIENT_COMPRESS: Использовать сжатие в протоколе клиент/сервер.CLIENT_FOUND_ROWS: Возвратить количество найденных (совпавших) строк, а не изменённых.-
CLIENT_IGNORE_SIGPIPE: Препятствует установке обработчика сигналовSIGPIPEбиблиотекой клиента. Это может быть использовано для предотвращения конфликтов с обработчиком, уже установленным приложением. CLIENT_IGNORE_SPACE: Разрешить пробелы после имён функций. Делает все имена функций зарезервированными словами.CLIENT_INTERACTIVE: Разрешить секунд бездействия (вместо секунд) перед закрытием соединения. Переменная сессии клиента устанавливается в значение переменной сессии.CLIENT_LOCAL_FILES: Включить обработку.CLIENT_MULTI_RESULTS: Сообщить серверу, что клиент может обрабатывать несколько наборов результатов при выполнении нескольких инструкций или хранимых процедур. Этот флаг автоматически включается, если включенCLIENT_MULTI_STATEMENTS. См. примечание после этой таблицы для получения дополнительной информации об этом флаге.CLIENT_MULTI_STATEMENTS: Сообщить серверу, что клиент может отправлять несколько инструкций в одной строке (разделенные;символами). Если этот флаг не установлен, выполнение нескольких инструкций отключено. См. примечание после этой таблицы для получения дополнительной информации об этом флаге.-
CLIENT_NO_SCHEMA: Не разрешать синтаксисdb_name.tbl_name.col_name. Это для ODBC. Приводит к ошибке парсера, если используется этот синтаксис, что полезно для отладки некоторых программ ODBC.Начиная с MySQL 8.0.32, флаг
CLIENT_NO_SCHEMAустарел. Программы-клиенты могут опустить этот флаг и аргументdb, чтобы подключение установило значение базы данных на текущую (или по умолчанию). CLIENT_ODBC: Не используется.CLIENT_OPTIONAL_RESULTSET_METADATA: Этот флаг делает метаданные набора результатов необязательными. Подавление передачи метаданных может улучшить производительность, особенно для сеансов, выполняющих много запросов, каждый из которых возвращает мало строк. Подробнее о управлении передачей метаданных набора результатов см. Раздел 3.6.7, «Необязательные метаданные набора результатов».CLIENT_SSL: Использовать SSL (зашифрованный протокол). Не устанавливайте этот параметр в программе-приложении; он устанавливается внутри библиотеки клиента. Вместо этого используйтеmysql_options()перед вызовомmysql_real_connect().CLIENT_REMEMBER_OPTIONS: Запомнить параметры, указанные в вызовахmysql_options(). Без этого флага, еслиmysql_real_connect()завершится неудачно, необходимо повторить вызовыmysql_options()перед повторной попыткой подключения. С этим флагом вызовыmysql_options()повторять не нужно.
Если ваша программа использует инструкции для выполнения хранимых процедур, флаг CLIENT_MULTI_RESULTS должен быть включён. Это потому, что каждая возвращает результат, указывающий статус вызова, помимо любых наборов результатов, которые могут быть возвращены инструкциями, выполняемыми внутри процедуры. Поскольку может возвращать несколько результатов, обрабатывайте их с помощью цикла, вызывающего mysql_next_result(), чтобы определить, есть ли ещё результаты.
CLIENT_MULTI_RESULTS может быть включено при вызове mysql_real_connect(), как явно, передавая флаг CLIENT_MULTI_RESULTS, так и неявно, передавая CLIENT_MULTI_STATEMENTS (что также включает CLIENT_MULTI_RESULTS). CLIENT_MULTI_RESULTS включен по умолчанию.
Если включены CLIENT_MULTI_STATEMENTS или CLIENT_MULTI_RESULTS, обрабатывайте результат для каждого вызова mysql_real_query() или mysql_query(), используя цикл, вызывающий mysql_next_result(), чтобы определить, есть ли ещё результаты. Пример см. в Разделе 3.6.3, «Поддержка выполнения нескольких инструкций».
Для некоторых аргументов возможно использование значения из файла параметров вместо явного значения в вызове mysql_real_connect(). Для этого вызовите mysql_options() с параметром MYSQL_READ_DEFAULT_FILE или MYSQL_READ_DEFAULT_GROUP перед вызовом mysql_real_connect(). Затем в вызове mysql_real_connect() укажите значение “no-value” для каждого аргумента, который должен быть прочитан из файла параметров:
Для
host, укажите значениеNULLили пустую строку ("").Для
user, укажите значениеNULLили пустую строку.Для
passwd, укажите значениеNULL. (Для пароля, значение пустой строки в вызовеmysql_real_connect()не может быть переопределено в файле параметров, так как пустая строка явно указывает, что у учётной записи MySQL должен быть пустой пароль.)Для
db, укажите значениеNULLили пустую строку.Для
port, укажите значение 0.Для
unix_socket, укажите значениеNULL.
Если в файле параметров не найдено значение для аргумента, используется его значение по умолчанию, как указано в описаниях ранее в этом разделе.
Значения возврата
Обработчик соединения MYSQL*, если подключение было успешным, NULL, если подключение не удалось. Для успешного подключения возвращаемое значение равно значению первого аргумента.
Ошибки
-
Не удалось подключиться к серверу MySQL.
-
Не удалось подключиться к локальному серверу MySQL.
-
Не удалось создать IP-сокет.
-
Нет памяти.
-
Не удалось создать Unix-сокет.
-
Не удалось найти IP-адрес для имени хоста.
-
Произошел несоответствие протокола в результате попытки подключения к серверу с библиотекой клиента, которая использует другую версию протокола.
-
Не удалось создать именованную трубу в Windows.
-
Не удалось дождаться именованной трубы в Windows.
-
Не удалось получить обработчик трубы в Windows.
-
Если > 0 и подключение к серверу заняло больше чем секунд или сервер вышел из строя во время выполнения
init-command. -
Обработчик соединения
MYSQLуже подключен.
Пример
MYSQL mysql;
mysql_init(&mysql);
mysql_options(&mysql,MYSQL_READ_DEFAULT_GROUP,"your_prog_name");
if (!mysql_real_connect(&mysql,"host","user","passwd","database",0,NULL,0))
{
fprintf(stderr, "Failed to connect to database: Error: %s\n",
mysql_error(&mysql));
}
Используя mysql_options(), библиотека клиента MySQL читает секции [client] и [your_prog_name] в файле my.cnf. Это позволяет добавить параметры в секцию [your_prog_name], чтобы обеспечить работу программы даже в случае нестандартной настройки MySQL.
© 2025 Oracle
Licensed under the GPLv2 License.