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_PROTOCOL
或MYSQL_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_STATEMENTS
或CLIENT_MULTI_RESULTS
,处理每个调用的结果mysql_real_query ()
或mysql_query ()
通过使用循环调用mysql_next_result ()
以确定是否有更多的结果。有关示例,请参见3.6.2节“多语句执行支持”.
属性中的显式值,而不是选项文件中的值mysql_real_connect ()
调用。要做到这一点,请调用mysql_options ()
与MYSQL_READ_DEFAULT_FILE
或MYSQL_READ_DEFAULT_GROUP
调用前的选项mysql_real_connect ()
.然后,在mysql_real_connect ()
调用时,指定”没有任何价值”从选项文件中读取的每个参数的值:
为
宿主
,指定值为零
或空字符串(”“
).为
用户
,指定值为零
或者空字符串。为
passwd
,指定值为零
.方法中的空字符串的值mysql_real_connect ()
调用不能在选项文件中被覆盖,因为空字符串显式地表明MySQL帐户必须有空密码。)为
db
,指定值为零
或者空字符串。为
港口
,指定值为0。为
unix_socket
,指定值为零
.
如果在选项文件中没有为参数找到值,则使用其默认值,如本节前面给出的描述所示。
日志含义连接MySQL服务器失败。
日志含义连接本地MySQL服务器失败。
日志含义创建IP socket失败。
内存不足。
日志含义创建Unix socket失败。
日志含义找不到主机名对应的IP地址。
由于试图连接到使用不同协议版本的客户端库的服务器而导致协议不匹配。
在Windows上创建命名管道失败。
在Windows上等待命名管道失败。
在Windows上获取管道处理程序失败。
如果
connect_timeout
> 0,花的时间比connect_timeout
连接到服务器的秒数,或者服务器在执行init命令
.的
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。