10bet网址
MySQL 5.6 C API开发指南
本手册下载
PDF (Ltr)- 1.1 mb
PDF (A4)- 1.1 mb
HTML下载(TGZ)- 135.1 kb
HTML下载(邮政编码)- 144.8 kb


5.4.53 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服务器上运行宿主.客户端程序必须成功连接到服务器,才能执行任何其他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_PROTOCOLMYSQL_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_STATEMENTSCLIENT_MULTI_RESULTS,处理每次调用的结果mysql_real_query ()mysql_query ()通过使用一个调用mysql_next_result ()以确定是否有更多的结果。示例请参见第3.5.2节,“多语句执行支持”

类中的显式值可以从选项文件中获取值,而不是从选项文件中获取值mysql_real_connect ()调用。要做到这一点,打电话mysql_options ()MYSQL_READ_DEFAULT_FILEMYSQL_READ_DEFAULT_GROUP选择之前调用mysql_real_connect ().然后,在mysql_real_connect ()电话,指定没有任何价值从选项文件中读取的每个参数的值:

  • 宿主,指定值或空字符串("").

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

  • passwd,指定值.中的空字符串的值mysql_real_connect ()call不能在选项文件中被重写,因为空字符串显式表明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。