Rechercher dans le manuel MySQL
28. 7. 7. 54 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()
is a
synchronous function. Its asynchronous counterpart is
mysql_real_connect_nonblocking()
,
for use by applications that require asynchronous
communication with the server. See
Section 28.7.12, “C API Asynchronous Interface”.
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 handler structure.
The parameters are specified as follows:
For the first parameter, specify the address of an existing
MYSQL
structure. Before callingmysql_real_connect()
, callmysql_init()
to initialize theMYSQL
structure. You can change a lot of connect options with themysql_options()
call. See Section 28.7.7.50, “mysql_options()”.The value of
host
may be either a host name or an IP address. The client attempts to connect as follows:If
host
isNULL
or the string"localhost"
, a connection to the local host is assumed:On Windows, the client connects using a shared-memory connection, if the server has shared-memory connections enabled.
On Unix, the client connects using a Unix socket file. The
unix_socket
parameter or theMYSQL_UNIX_PORT
environment variable may be used to specify the socket name.
On Windows, if
host
is"."
, or TCP/IP is not enabled and nounix_socket
is specified or the host is empty, 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.Otherwise, TCP/IP is used.
You can also influence the type of connection to use with the
MYSQL_OPT_PROTOCOL
orMYSQL_OPT_NAMED_PIPE
options tomysql_options()
. The type of connection must be supported by the server.The
user
parameter contains the user's MySQL login ID. Ifuser
isNULL
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 28, Connectors and APIs.The
passwd
parameter contains the password foruser
. Ifpasswd
isNULL
, only entries in theuser
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.NoteDo not attempt to encrypt the password before calling
mysql_real_connect()
; password encryption is handled automatically by the client API.The
user
andpasswd
parameters use whatever character set has been configured for theMYSQL
object. By default, this isutf8mb4
, but can be changed by callingmysql_options(mysql, MYSQL_SET_CHARSET_NAME, "
prior to connecting.charset_name
")db
is the database name. Ifdb
is notNULL
, 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 thehost
parameter determines the type of the connection.If
unix_socket
is notNULL
, the string specifies the socket or named pipe to use. Note that thehost
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:CAN_HANDLE_EXPIRED_PASSWORDS
: The client can handle expired passwords. For more information, see Section 6.2.16, “Server Handling of Expired Passwords”.CLIENT_COMPRESS
: Use compression in the client/server 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
: Permitinteractive_timeout
seconds of inactivity (rather thanwait_timeout
seconds) before closing the connection. The client's sessionwait_timeout
variable is set to the value of the sessioninteractive_timeout
variable.CLIENT_LOCAL_FILES
: EnableLOAD DATA LOCAL
handling.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 ifCLIENT_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;
characters). 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 permitdb_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_OPTIONAL_RESULTSET_METADATA
: This flag makes result set metadata optional. Suppression of metadata transfer can improve performance, particularly for sessions that execute many queries that return few rows each. For details about managing result set metadata transfer, see Section 28.7.27, “C API Optional Result Set Metadata”.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_options()
ormysql_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 themysql_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 the
CLIENT_MULTI_RESULTS
flag itself, or
implicitly by passing
CLIENT_MULTI_STATEMENTS
(which also enables
CLIENT_MULTI_RESULTS
).
CLIENT_MULTI_RESULTS
is enabled by default.
If you enable CLIENT_MULTI_STATEMENTS
or
CLIENT_MULTI_RESULTS
, process the result
for every call to
mysql_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 28.7.23, “C API Multiple Statement Execution Support”.
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
or
MYSQL_READ_DEFAULT_GROUP
option before
calling mysql_real_connect()
.
Then, in the
mysql_real_connect()
call,
specify the “no-value” value for each parameter
to be read from an option file:
For
host
, specify a value ofNULL
or the empty string (""
).For
user
, specify a value ofNULL
or the empty string.For
passwd
, specify a value ofNULL
. (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 ofNULL
or the empty string.For
port
, specify a value of 0.For
unix_socket
, specify a value ofNULL
.
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.
A MYSQL*
connection handler 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.
Failed to connect to the MySQL server.
Failed to connect to the local MySQL server.
Failed to create an IP socket.
Out of memory.
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 thanconnect_timeout
seconds to connect to the server or if the server died while executing theinit-command
.The
MYSQL
connection handler is already connected.
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 client library reads the [client]
and
[your_prog_name]
sections in the
my.cnf
file which ensures that your
program works, even if someone has set up MySQL in some
nonstandard way.
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.
Document created the 26/06/2006, last modified the 26/10/2018
Source of the printed document:https://www.gaudry.be/en/mysql-rf-mysql-real-connect.html
The infobrol is a personal site whose content is my sole responsibility. The text is available under CreativeCommons license (BY-NC-SA). More info on the terms of use and the author.
References
These references and links indicate documents consulted during the writing of this page, or which may provide additional information, but the authors of these sources can not be held responsible for the content of this page.
The author This site is solely responsible for the way in which the various concepts, and the freedoms that are taken with the reference works, are presented here. Remember that you must cross multiple source information to reduce the risk of errors.