mysql mysql_real_connect_MySQL基础知识———mysql_real_connect() | 学步园

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)

Description

mysql_real_connect() attempts

to establish a connection to a MySQL database engine running on host. mysql_real_connect() must

complete successfully before you can execute any other API functions that require a valid MYSQL connection

handle structure.

The parameters are specified as follows:

For the first parameter, specify the address of an existing MYSQL structure.

Before calling mysql_real_connect(),

call mysql_init() to

initialize the MYSQLstructure.

You can change a lot of connect options with the mysql_options() call.

See Section 22.8.7.49,

“mysql_options()”.

The value of host may be

either a host name or an IP address. If host is NULL or

the string "localhost",

a connection to the local host is assumed. For Windows, the client connects using a shared-memory connection, if the server has shared-memory connections enabled. Otherwise, TCP/IP is used. For Unix, the client connects using a Unix socket file. For local

connections, you can also influence the type of connection to use with the MYSQL_OPT_PROTOCOL orMYSQL_OPT_NAMED_PIPE options

to mysql_options().

The type of connection must be supported by the server. For a host value

of "." on Windows, the

client connects using a named pipe, if the server has named-pipe connections enabled. If named-pipe connections are not enabled, an error occurs.

The user parameter contains

the user's MySQL login ID. If user is NULL or

the empty string "", the

current user is assumed. Under Unix, this is the current login name. Under Windows ODBC, the current user name must be specified explicitly. See the Connector/ODBC section of Chapter 22, Connectors

and APIs.

The passwd parameter contains

the password for user.

If passwd is NULL,

only entries in the user table

for the user that have a blank (empty) password field are checked for a match. This enables the database administrator to set up the MySQL privilege system in such a way that users get different privileges depending on whether they have specified a password.

Note

Do not attempt to encrypt the password before callingmysql_real_connect();

password encryption is handled automatically by the client API.

The user and passwd parameters

use whatever character set has been configured for the MYSQL object.

By default, this is latin1,

but can be changed by callingmysql_options(mysql,

MYSQL_SET_CHARSET_NAME, "charset_name") prior

to connecting.

db is the database name.

If db is not NULL,

the connection sets the default database to this value.

If port is not 0, the value

is used as the port number for the TCP/IP connection. Note that the host parameter

determines the type of the connection.

If unix_socket is not NULL,

the string specifies the socket or named pipe to use. Note that the host parameter

determines the type of the connection.

The value of client_flag is

usually 0, but can be set to a combination of the following flags to enable certain features.

Flag Name

Flag Description

CAN_HANDLE_EXPIRED_PASSWORDS

The client can handle expired passwords. For more information, see Section 6.3.6,

“Password Expiration and Sandbox Mode”. This option was added in MySQL 5.6.10.

CLIENT_COMPRESS

Use compression protocol.

CLIENT_FOUND_ROWS

Return the number of found (matched) rows, not the number of changed rows.

CLIENT_IGNORE_SIGPIPE

Prevents the client library from installing aSIGPIPE signal

handler. This can be used to avoid conflicts with a handler that the application has already installed.

CLIENT_IGNORE_SPACE

Permit spaces after function names. Makes all functions names reserved words.

CLIENT_INTERACTIVE

Permit interactive_timeout seconds

(instead of wait_timeout seconds)

of inactivity before closing the connection. The client's session wait_timeout variable

is set to the value of the sessioninteractive_timeout variable.

CLIENT_LOCAL_FILES

CLIENT_MULTI_RESULTS

Tell the server that the client can handle multiple result sets from multiple-statement executions or stored procedures. This flag is automatically enabled if CLIENT_MULTI_STATEMENTS is

enabled. See the note following this table for more information about this flag.

CLIENT_MULTI_STATEMENTS

Tell the server that the client may send multiple statements in a single string (separated by “;”).

If this flag is not set, multiple-statement execution is disabled. See the note following this table for more information about this flag.

CLIENT_NO_SCHEMA

Do not permit thedb_name.tbl_name.col_name syntax.

This is for ODBC. It causes the parser to generate an error if you use that syntax, which is useful for trapping bugs in some ODBC programs.

CLIENT_ODBC

Unused.

CLIENT_SSL

Use SSL (encrypted protocol). Do not set this option within an application program; it is set internally in the client library. Instead, usemysql_ssl_set() before

callingmysql_real_connect().

CLIENT_REMEMBER_OPTIONS

Remember options specified by calls tomysql_options().

Without this option, ifmysql_real_connect() fails,

you must repeat the mysql_options() calls

before trying to connect again. With this option, themysql_options() calls

need not be repeated.

If your program uses CALL statements

to execute stored procedures, the CLIENT_MULTI_RESULTS flag

must be enabled. This is because each CALL returns

a result to indicate the call status, in addition to any result sets that might be returned by statements executed within the procedure. Because CALL can

return multiple results, process them using a loop that calls mysql_next_result() to

determine whether there are more results.

CLIENT_MULTI_RESULTS can

be enabled when you call mysql_real_connect(),

either explicitly by passing theCLIENT_MULTI_RESULTS flag

itself, or implicitly by passing CLIENT_MULTI_STATEMENTS (which

also enablesCLIENT_MULTI_RESULTS).

In MySQL 5.6, CLIENT_MULTI_RESULTS is

enabled by default.

If you enable CLIENT_MULTI_STATEMENTS or CLIENT_MULTI_RESULTS,

process the result for every call tomysql_query() or mysql_real_query() by

using a loop that calls mysql_next_result() to

determine whether there are more results. For an example, see Section 22.8.17,

“C API Support for Multiple Statement Execution”.

For some parameters, it is possible to have the value taken from an option file rather than from an explicit value in the mysql_real_connect() call.

To do this, call mysql_options() with

the MYSQL_READ_DEFAULT_FILE orMYSQL_READ_DEFAULT_GROUP option

before calling mysql_real_connect().

Then, in themysql_real_connect() call,

specify the “no-value” value

for each parameter to be read from an option file:

For host, specify a value

of NULL or the empty string

("").

For user, specify a value

of NULL or the empty string.

For passwd, specify a value

of NULL. (For the password,

a value of the empty string in themysql_real_connect() call

cannot be overridden in an option file, because the empty string indicates explicitly that the MySQL account must have an empty password.)

For db, specify a value

of NULL or the empty string.

For port, specify a value

of 0.

For unix_socket, specify

a value of NULL.

If no value is found in an option file for a parameter, its default value is used as indicated in the descriptions given earlier in this section.

Return Values

A MYSQL* connection handle

if the connection was successful, NULL if

the connection was unsuccessful. For a successful connection, the return value is the same as the value of the first parameter.

Errors

Failed to connect to the MySQL server.

Failed to connect to the local MySQL server.

Failed to create an IP socket.

Failed to create a Unix socket.

Failed to find the IP address for the host name.

A protocol mismatch resulted from attempting to connect to a server with a client library that uses a different protocol version.

Failed to create a named pipe on Windows.

Failed to wait for a named pipe on Windows.

Failed to get a pipe handler on Windows.

If connect_timeout >

0 and it took longer than connect_timeout seconds

to connect to the server or if the server died while executing the init-command.

The MYSQL connection handle

is already connected.

Example

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));

}

By using mysql_options() the

MySQL library reads the [client] and [your_prog_name] sections

in themy.cnf file which ensures that your

program works, even if someone has set up MySQL in some nonstandard way.

Note that upon connection, mysql_real_connect() sets

the reconnect flag (part

of the MYSQL structure)

to a value of 1 in versions

of the API older than 5.0.3, or 0 in

newer versions. A value of 1 for

this flag indicates that if a statement cannot be performed because of a lost connection, to try reconnecting to the server before giving up. You can use the MYSQL_OPT_RECONNECT option

to mysql_options() to

control reconnection behavior.

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值