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服务器上运行宿主
.客户端程序必须成功连接到服务器,才能执行任何其他API函数,这些API函数需要有效的MYSQL
连接处理器结构。
指定参数如下:
对于第一个参数,指定现有的
MYSQL
结构。在调用之前mysql_real_connect ()
,叫mysql_init ()
初始化MYSQL
结构。方法可以更改许多连接选项mysql_options ()
调用。看到部分5.4.49”mysql_options ().的价值
宿主
可能是主机名或IP地址。客户端以如下方式尝试连接:如果
宿主
是零
或字符串“localhost”
,假设连接到本地主机:在Windows上,如果服务器启用了共享内存连接,则客户机使用共享内存连接进行连接。
在Unix上,客户端使用Unix套接字文件进行连接。的
unix_socket
参数或MYSQL_UNIX_PORT
环境变量可用于指定套接字名称。
在Windows上,如果
宿主
是“。”
,或TCP/IP未启用unix_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
对象。默认情况下,这是latin1
,但可以通过调用来改变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_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_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
标志必须启用。这是因为调用
除了过程中执行的语句可能返回的任何结果集之外,还返回一个结果以指示调用状态。因为调用
可以返回多个结果,处理他们使用一个循环调用mysql_next_result ()
以确定是否有更多的结果。
CLIENT_MULTI_RESULTS
是否可以在调用时启用mysql_real_connect ()
,要么显式地通过传递CLIENT_MULTI_RESULTS
标志本身,或隐式通过传递CLIENT_MULTI_STATEMENTS
(也可以CLIENT_MULTI_RESULTS
).在MySQL 5.6中,CLIENT_MULTI_RESULTS
默认启用。
如果你使CLIENT_MULTI_STATEMENTS
或CLIENT_MULTI_RESULTS
,处理每次调用的结果mysql_real_query ()
或mysql_query ()
通过使用一个调用mysql_next_result ()
以确定是否有更多的结果。示例请参见第3.5.2节,“多语句执行支持”.
类中的显式值可以从选项文件中获取值,而不是从选项文件中获取值mysql_real_connect ()
调用。要做到这一点,打电话mysql_options ()
与MYSQL_READ_DEFAULT_FILE
或MYSQL_READ_DEFAULT_GROUP
选择之前调用mysql_real_connect ()
.然后,在mysql_real_connect ()
电话,指定”没有任何价值”从选项文件中读取的每个参数的值:
为
宿主
,指定值零
或空字符串(""
).为
用户
,指定值零
或者空字符串。为
passwd
,指定值零
.中的空字符串的值mysql_real_connect ()
call不能在选项文件中被重写,因为空字符串显式表明MySQL帐户必须有一个空密码。)为
db
,指定值零
或者空字符串。为
港口
,指定值为0。为
unix_socket
,指定值零
.
如果在参数的选项文件中没有找到值,则使用它的默认值,如本节前面给出的描述所示。
连接MySQL服务器失败。处理步骤
连接本地MySQL服务器失败。
日志含义创建IP套接字失败。
内存不足。
日志含义创建Unix套接字失败。
日志含义找不到主机名的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。