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.