©
This document uses PHP Chinese website manual Release
(PHP 5)
mysqli::real_connect -- mysqli_real_connect — 建立一个 MySQL 服务器连接
面向对象风格
$host
[, string $username
[, string $passwd
[, string $dbname
[, int $port
[, string $socket
[, int $flags
]]]]]]] )过程化风格
$link
[, string $host
[, string $username
[, string $passwd
[, string $dbname
[, int $port
[, string $socket
[, int $flags
]]]]]]] )建立一个到 MySQL 服务器的链接。
与 mysqli_connect() 的不同点:
mysqli_real_connect() 需要一个有效的对象,这个对象由 mysqli_init() 创建。
可以使用 mysqli_options() 设置各种连接设置。
提供 flags
参数。
link
仅以过程化样式:由 mysqli_connect() 或 mysqli_init() 返回的链接标识。
host
可以使用域名、IP 地址。如果传送 NULL
或者字符串 "localhost" 那么会使用
通道替代 TCP/IP 连接本地服务器。
username
MySQL 登录用户名
passwd
如果设置 NULL
,那么会使用没有密码验证的方式尝试登录。这样可以为一个用户
提供不同的权限,基于他是否提供了密码。
dbname
设置执行查询语句的默认数据库。
port
指定 MySQL 服务器的端口
socket
指定使用的 socket 或者命名通道。
Note:
指定
socket
参数并不能说明要采用何种方式连接数据库。 连接数据的方式由host
设定。
flags
这里可以设置连接参数:
Name | Description |
---|---|
MYSQLI_CLIENT_COMPRESS | 使用压缩协议 |
MYSQLI_CLIENT_FOUND_ROWS | 返回语句匹配的行数,而不是影响的行数 |
MYSQLI_CLIENT_IGNORE_SPACE | 允许函数名称后有空格,这将使所有的函数名称成为保留字。 |
MYSQLI_CLIENT_INTERACTIVE | 在关闭连接之前允许等待 interactive_timeout 秒, 他替代 wait_timeout 设定。 |
MYSQLI_CLIENT_SSL | 使用 SSL 加密 |
Note:
从安全角度考虑,在 PHP 中不可以使用
MULTI_STATEMENT
, 若要执行多查询语句,请使用 mysqli_multi_query() 。
成功时返回 TRUE
, 或者在失败时返回 FALSE
。
Example #1 mysqli::real_connect() 例子
面向对象风格
<?php
$mysqli = mysqli_init ();
if (! $mysqli ) {
die( 'mysqli_init failed' );
}
if (! $mysqli -> options ( MYSQLI_INIT_COMMAND , 'SET AUTOCOMMIT = 0' )) {
die( 'Setting MYSQLI_INIT_COMMAND failed' );
}
if (! $mysqli -> options ( MYSQLI_OPT_CONNECT_TIMEOUT , 5 )) {
die( 'Setting MYSQLI_OPT_CONNECT_TIMEOUT failed' );
}
if (! $mysqli -> real_connect ( 'localhost' , 'my_user' , 'my_password' , 'my_db' )) {
die( 'Connect Error (' . mysqli_connect_errno () . ') '
. mysqli_connect_error ());
}
echo 'Success... ' . $mysqli -> host_info . "\n" ;
$mysqli -> close ();
?>
面向对象风格 when extending mysqli class
<?php
class foo_mysqli extends mysqli {
public function __construct ( $host , $user , $pass , $db ) {
parent :: init ();
if (! parent :: options ( MYSQLI_INIT_COMMAND , 'SET AUTOCOMMIT = 0' )) {
die( 'Setting MYSQLI_INIT_COMMAND failed' );
}
if (! parent :: options ( MYSQLI_OPT_CONNECT_TIMEOUT , 5 )) {
die( 'Setting MYSQLI_OPT_CONNECT_TIMEOUT failed' );
}
if (! parent :: real_connect ( $host , $user , $pass , $db )) {
die( 'Connect Error (' . mysqli_connect_errno () . ') '
. mysqli_connect_error ());
}
}
}
$db = new foo_mysqli ( 'localhost' , 'my_user' , 'my_password' , 'my_db' );
echo 'Success... ' . $db -> host_info . "\n" ;
$db -> close ();
?>
过程化风格
<?php
$link = mysqli_init ();
if (! $link ) {
die( 'mysqli_init failed' );
}
if (! mysqli_options ( $link , MYSQLI_INIT_COMMAND , 'SET AUTOCOMMIT = 0' )) {
die( 'Setting MYSQLI_INIT_COMMAND failed' );
}
if (! mysqli_options ( $link , MYSQLI_OPT_CONNECT_TIMEOUT , 5 )) {
die( 'Setting MYSQLI_OPT_CONNECT_TIMEOUT failed' );
}
if (! mysqli_real_connect ( $link , 'localhost' , 'my_user' , 'my_password' , 'my_db' )) {
die( 'Connect Error (' . mysqli_connect_errno () . ') '
. mysqli_connect_error ());
}
echo 'Success... ' . mysqli_get_host_info ( $link ) . "\n" ;
mysqli_close ( $link );
?>
以上例程会输出:
Success... MySQL host info: localhost via TCP/IP
Note:
MySQLnd 总是使用服务器的默认字符集。此字符集在连接握手/认证时发送,并被 mysqlnd 使用。
Libmysqlclient 使用 my.cnf 中的默认字符集或者由在调用 mysqli_init() 之后, mysqli_real_connect() 之前先调用 mysqli_options() 来指定。
[#1] php-nospam325123 at brainpower dot no-ip dot org [2010-12-03 03:29:58]
this is because it tries to use sockets with the string localhost this is documented en known
[#2] Pom [2009-12-01 03:47:53]
Notice that when using "localhost" as hostname the port option might be ignored.
If you wish to connect thru a different port than default, substitute "127.0.0.1" for localhost.