Php/docs/mysqli.real-connect
mysqli::real_connect
mysqli_real_connect
(PHP 5, PHP 7)
mysqli::real_connect -- mysqli_real_connect — 建立一个 MySQL 服务器连接
说明
面向对象风格
mysqli::real_connect
([ string $host
[, string $username
[, string $passwd
[, string $dbname
[, int $port
[, string $socket
[, int $flags
]]]]]]] ) : bool
过程化风格
mysqli_real_connect
( mysqli $link
[, string $host
[, string $username
[, string $passwd
[, string $dbname
[, int $port
[, string $socket
[, int $flags
]]]]]]] ) : bool
建立一个到 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
这里可以设置连接参数:
Supported 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
<?phpclass 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() 来指定。
参见
- mysqli_connect() - 别名 mysqli::__construct
- mysqli_init() - 初始化 MySQLi 并返回一个资源类型的值,这个值可以作为 mysqli_real_connect() 函数的传入参数
- mysqli_options() - 设置选项
- mysqli_ssl_set() - 使用 SSL 建立到数据库之间的安全连接
- mysqli_close() - 关闭先前打开的数据库连接