10bet网址
MySQL 8.0 C API开发指南
下载本手册
PDF(美国高级主任)- 1.3 mb
PDF (A4)- 1.3 mb
HTML下载(TGZ)- 165.6 kb
HTML下载(Zip)- 176.1 kb


5.4.55 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 (),供需要与服务器进行异步通信的应用程序使用。看到第七章,C API异步接口

要使用DNS SRV记录进行连接,请使用mysql_real_connect_dns_srv ().看到第5.4.56节,“mysql_real_connect_dns_srv()”

mysql_real_connect ()试图建立到正在运行的MySQL服务器的连接宿主.客户端程序必须成功连接到服务器,然后才能执行任何其他需要有效的MYSQL连接处理程序结构。

指定参数如下:

  • 对于第一个参数,指定现有对象的地址MYSQL结构。在调用之前mysql_real_connect (),叫mysql_init ()初始化MYSQL结构。方法可以更改许多连接选项mysql_options ()调用。看到第5.4.51节“mysql_options()”

  • 的价值宿主可以是主机名或IP地址。客户端以如下方式尝试连接。

    • 如果宿主或者字符串“localhost”,假设连接到本地主机:

      • 在Windows上,如果服务器启用了共享内存连接,则客户端使用共享内存连接进行连接。

      • 在Unix上,客户端使用Unix套接字文件进行连接。的unix_socket参数或MYSQL_UNIX_PORT环境变量可以用来指定套接字名称。

    • 在Windows上,如果宿主“。”,或未启用TCP/IPunix_socket指定或主机为空时,如果服务器启用了命名管道连接,则客户端使用命名管道连接。如果未启用命名管道连接,则会发生错误。

    • 否则,使用TCP/IP协议。

    属性所使用的连接类型也可以影响MYSQL_OPT_PROTOCOLMYSQL_OPT_NAMED_PIPE选项mysql_options ().连接类型必须是服务器所支持的。

  • 用户参数包含用户的MySQL登录ID。如果用户或者空字符串”“,假设为当前用户。在Unix下,这是当前登录名。在Windows ODBC下,必须显式地指定当前用户名。的连接器/ODBC部分连接器和api

  • passwd参数包含的密码用户.如果passwd中的项用户表中密码字段为空(空)的用户进行匹配检查。这使得数据库管理员可以设置MySQL特权系统,使用户根据是否指定了密码获得不同的特权。

    请注意

    呼叫前不加密密码mysql_real_connect ();密码加密由客户端API自动处理。

  • 用户而且passwd类配置的字符集MYSQL对象。默认情况下,为utf8mb4,但可以通过呼叫来更改mysql_options(mysql, MYSQL_SET_CHARSET_NAME, "charset_name”)在连接之前。

  • db数据库名称。如果db不是,连接将默认数据库设置为此值。

  • 如果港口不为0时,该值作为TCP/IP连接的端口号。注意宿主参数确定连接的类型。

  • 如果unix_socket不是,字符串指定要使用的套接字或命名管道。注意宿主参数确定连接的类型。

  • 的价值client_flag通常为0,但可以设置为以下标志的组合以启用某些功能:

    • CAN_HANDLE_EXPIRED_PASSWORDS:客户端可以处理过期的密码。有关更多信息,请参见服务器处理过期密码

    • CLIENT_COMPRESS:在client/server协议中使用压缩。

    • CLIENT_FOUND_ROWS:返回找到的(匹配的)行数,而不是更改的行数。

    • CLIENT_IGNORE_SIGPIPE:阻止客户端库安装SIGPIPE信号处理程序。这可用于避免与应用程序已经安装的处理程序发生冲突。

    • CLIENT_IGNORE_SPACE:函数名后允许有空格。使所有函数名保留字。

    • CLIENT_INTERACTIVE:允许interactive_timeout几秒钟不活动(而不是wait_timeout秒),然后关闭连接。客户端的会话wait_timeout变量被设置为会话的值interactive_timeout变量。

    • CLIENT_LOCAL_FILES:使本地加载数据处理。

    • CLIENT_MULTI_RESULTS:告诉服务器客户端可以处理来自多条语句执行或存储过程的多个结果集。此标志将自动启用,如果CLIENT_MULTI_STATEMENTS启用。有关此标志的更多信息,请参阅本表后面的说明。

    • CLIENT_MULTI_STATEMENTS:告诉服务器客户端可以在一个字符串中发送多个语句(以字符)。如果未设置此标志,则禁用多语句执行。有关此标志的更多信息,请参阅本表后面的说明。

    • CLIENT_NO_SCHEMA不允许db_name.tbl_name.col_name语法。这是用于ODBC的。如果使用该语法,则会导致解析器生成错误,这对于捕获某些ODBC程序中的错误非常有用。

    • CLIENT_ODBC:未使用的。

    • CLIENT_OPTIONAL_RESULTSET_METADATA:该标志使结果集元数据可选。抑制元数据传输可以提高性能,特别是对于执行许多查询但每次返回很少行的会话。有关管理结果集元数据传输的详细信息,请参见3.6.6节,可选结果集元数据

    • CLIENT_SSL:使用SSL加密协议。不要在应用程序中设置此选项;它在客户端库中进行内部设置。相反,使用mysql_options ()mysql_ssl_set ()在调用之前mysql_real_connect ()

    • CLIENT_REMEMBER_OPTIONS记住调用指定的选项mysql_options ().如果没有这个选项,如果mysql_real_connect ()失败了,就必须重来mysql_options ()在尝试再次连接之前先呼叫。有了这个选项,mysql_options ()电话不需要重复。

如果您的程序使用调用语句来执行存储过程CLIENT_MULTI_RESULTS必须启用Flag。这是因为调用除了过程中执行的语句可能返回的任何结果集之外,还返回一个指示调用状态的结果。因为调用可以返回多个结果,处理他们使用循环调用mysql_next_result ()以确定是否有更多的结果。

CLIENT_MULTI_RESULTS可以在通话时启用吗mysql_real_connect (),或者通过传递CLIENT_MULTI_RESULTS标记本身,或通过传递隐式标记CLIENT_MULTI_STATEMENTS(这也使得CLIENT_MULTI_RESULTS).CLIENT_MULTI_RESULTS默认启用。

如果你启用CLIENT_MULTI_STATEMENTSCLIENT_MULTI_RESULTS,处理每个调用的结果mysql_real_query ()mysql_query ()通过使用循环调用mysql_next_result ()以确定是否有更多的结果。有关示例,请参见3.6.2节“多语句执行支持”

属性中的显式值,而不是选项文件中的值mysql_real_connect ()调用。要做到这一点,请调用mysql_options ()MYSQL_READ_DEFAULT_FILEMYSQL_READ_DEFAULT_GROUP调用前的选项mysql_real_connect ().然后,在mysql_real_connect ()调用时,指定没有任何价值从选项文件中读取的每个参数的值:

  • 宿主,指定值为或空字符串(”“).

  • 用户,指定值为或者空字符串。

  • passwd,指定值为.方法中的空字符串的值mysql_real_connect ()调用不能在选项文件中被覆盖,因为空字符串显式地表明MySQL帐户必须有空密码。)

  • db,指定值为或者空字符串。

  • 港口,指定值为0。

  • unix_socket,指定值为

如果在选项文件中没有为参数找到值,则使用其默认值,如本节前面给出的描述所示。

返回值

一个MYSQL *连接处理程序,如果连接成功,如果连接不成功。对于一个成功的连接,返回值与第一个参数的值相同。

错误

例子

MYSQL MYSQL;mysql_init (mysql);mysql_options (mysql, MYSQL_READ_DEFAULT_GROUP your_prog_name”);如果(!mysql_real_connect (mysql,“主机”、“用户”、“passwd","database",0,NULL,0)) {fprintf(stderr, "Failed to connect to database: Error: %s\n", mysql_error(&mysql));}

通过使用mysql_options ()MySQL客户端库读取(客户端)而且(your_prog_name)的部分my.cnf文件。属性中添加选项(your_prog_name)节来确保你的程序能够正常工作,即使有人用非标准的方式设置了MySQL。