PHP MySQLi 函数

PHP mysqli::real_connect() / mysqli_real_connect() 函数用于建立与 MySQL 数据库的连接引擎。此函数与 mysqli_connect() 不同:

  • mysqli_real_connect() 需要一个必须由函数 mysqli_init() 创建的有效对象。
  • mysqli_real_connect()可以与mysqli_options()函数一起使用来设置连接的各种选项。
  • mysqli_real_connect()有一个flags参数。
  • li>

语法

//面向对象风格
public mysqli::real_connect(host, username, passwd, 
                        dbname, port, socket, flags)

//面向过程风格
mysqli_real_connect(mysql, host, username, passwd, 
                      dbname, port, socket, flags)

参数

mysql 必需。 仅适用于面向过程风格:指定 mysqli_connect() 或 mysqli_init() 返回的 mysqli 对象。
host 可选。 指定主机名或 IP 地址。将 null 值或"localhost"传递给此参数,则假定为本地主机。
用户名 可选的。 指定 MySQL 用户名。
passwd 可选。 指定 MySQL 密码。这允许用户名用于不同的权限(取决于是否提供密码)。
dbname 可选。 如果提供,将指定执行查询时使用的默认数据库。
端口 可选的。 指定尝试连接 MySQL 服务器的端口号。
socket 可选。 指定应使用的套接字或命名管道。
flags 可选。 指定标志来设置不同的连接选项。可能的值为:
  • MYSQLI_CLIENT_COMPRESS - 使用压缩协议
  • MYSQLI_CLIENT_FOUND_ROWS - 返回匹配行数(不是受影响的行)
  • MYSQLI_CLIENT_IGNORE_SPACE - 函数名称后允许有空格。将所有函数名称设为保留字。
  • MYSQLI_CLIENT_INTERACTIVE - 在关闭连接之前允许 interactive_timeout 秒(而不是 wait_timeout 秒)不活动
  • MYSQLI_CLIENT_SSL - 使用 SSL(加密)
  • MYSQLI_CLIENT_SSL_DONT_VERIFY_SERVER_CERT - 与 MYSQLI_CLIENT_SSL 类似,但禁用对提供的 SSL 证书的验证。这仅适用于使用 MySQL Native Driver 和 MySQL 5.6 或更高版本的安装。

注意:出于安全原因,PHP 不支持 MULTI_STATEMENT 标志。要执行多个查询,请使用 mysqli_multi_query() 函数。

返回值

成功时返回 true,失败时返回 false。

示例:面向对象风格

下面的示例显示了 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, 10)) {
  die('Setting MYSQLI_OPT_CONNECT_TIMEOUT failed');
}

//建立与数据库的连接
if (!$mysqli->real_connect("localhost", "user", "password", "database")) {
  die('Connect Error: '. mysqli_connect_error());
}

echo 'Success... ' . $mysqli->host_info . "\n";

//关闭连接
$mysqli->close();
?>

上述代码的输出将是:

Success... MySQL host info: localhost via TCP/IP

示例:扩展 mysqli 类时的面向对象风格

考虑下面的示例,其中在扩展 mysqli 类时使用此方法。

<?php
class acs_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, 10)) {
      die('Setting MYSQLI_OPT_CONNECT_TIMEOUT failed');
    }

    if (!parent::real_connect($host, $user, $pass, $db)) {
      die('Connect Error: ' . mysqli_connect_error());
    }
  }
}

//建立与数据库的连接
$db = new acs_mysqli("localhost", "user", "password", "database");

echo 'Success... ' . $db->host_info . "\n";

//关闭连接
$db->close();
?>

上述代码的输出将是:

Success... MySQL host info: localhost via TCP/IP

示例:面向过程风格

下面的示例显示mysqli_real_connect()函数的用法。

<?php
$mysqli = mysqli_init();
if (!$mysqli) {
  die('mysqli_init failed');
}

if (!mysqli_options($mysqli, MYSQLI_INIT_COMMAND, 'SET AUTOCOMMIT = 0')) {
  die('Setting MYSQLI_INIT_COMMAND failed');
}

//指定连接超时
if (!mysqli_options($mysqli, MYSQLI_OPT_CONNECT_TIMEOUT, 10)) {
  die('Setting MYSQLI_OPT_CONNECT_TIMEOUT failed');
}

//建立与数据库的连接
if (!mysqli_real_connect($mysqli, "localhost", "user", "password", "database")) {
  die('Connect Error: '. mysqli_connect_error());
}

echo 'Success... ' . mysqli_get_host_info($mysqli) . "\n";

//关闭连接
mysqli_close($mysqli);
?>

上述代码的输出将是:

Success... MySQL host info: localhost via TCP/IP