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() 来指定。

参见