PHP Conference Japan 2024

mysqli::real_connect

mysqli_real_connect

(PHP 5, PHP 7, PHP 8)

mysqli::real_connect -- mysqli_real_connect打开到 mysql 服务器的连接

描述

面向对象风格

public mysqli::real_connect(
    ?string $hostname = null,
    ?string $username = null,
    #[\SensitiveParameter] ?string $password = null,
    ?string $database = null,
    ?int $port = null,
    ?string $socket = null,
    int $flags = 0
): bool

过程式风格

mysqli_real_connect(
    mysqli $mysql,
    ?string $hostname = null,
    ?string $username = null,
    #[\SensitiveParameter] ?string $password = null,
    ?string $database = null,
    ?int $port = null,
    ?string $socket = null,
    int $flags = 0
): bool

建立到 MySQL 数据库引擎的连接。

此函数与 mysqli_connect() 不同

  • mysqli_real_connect() 需要一个有效的对象,该对象必须由函数 mysqli_init() 创建。

  • 使用 mysqli_options() 函数,您可以为连接设置各种选项。

  • 有一个 flags 参数。

参数

mysql

仅过程式风格:由 mysqli_connect()mysqli_init() 返回的 mysqli 对象

hostname

可以是主机名或 IP 地址。当传递 null 时,该值将从 mysqli.default_host 中检索。如果可能,将使用管道而不是 TCP/IP 协议。如果同时提供主机名和端口号,则使用 TCP/IP 协议,例如 localhost:3308

username

MySQL 用户名或 null 以根据 mysqli.default_user ini 选项假定用户名。

password

MySQL 密码或 null 以根据 mysqli.default_pw ini 选项假定密码。

database

执行查询时要使用的默认数据库或 null

port

尝试连接到 MySQL 服务器的端口号或 null 以根据 mysqli.default_port ini 选项假定端口。

socket

应使用的套接字或命名管道或 null 以根据 mysqli.default_socket ini 选项假定套接字。

注意:

指定 socket 参数不会明确确定在连接到 MySQL 服务器时要使用的连接类型。如何连接到 MySQL 数据库由 hostname 参数确定。

flags

使用参数 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 错误报告 (MYSQLI_REPORT_ERROR) 并且请求的操作失败,则会生成警告。此外,如果模式设置为 MYSQLI_REPORT_STRICT,则会抛出 mysqli_sql_exception

变更日志

版本 描述
7.4.0 所有参数现在都可为空。

示例

示例 #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();
?>

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

<?php

class foo_mysqli extends mysqli {
public function
__construct($host, $user, $pass, $db) {
parent::__construct();

if (!
parent::options(MYSQLI_INIT_COMMAND, 'SET AUTOCOMMIT = 0')) {
die(
'设置 MYSQLI_INIT_COMMAND 失败');
}

if (!
parent::options(MYSQLI_OPT_CONNECT_TIMEOUT, 5)) {
die(
'设置 MYSQLI_OPT_CONNECT_TIMEOUT 失败');
}

if (!
parent::real_connect($host, $user, $pass, $db)) {
die(
'连接错误 (' . mysqli_connect_errno() . ') '
. mysqli_connect_error());
}
}
}

$db = new foo_mysqli('localhost', 'my_user', 'my_password', 'my_db');

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

$db->close();
?>

过程式风格

<?php

$link
= mysqli_init();
if (!
$link) {
die(
'mysqli_init 失败');
}

if (!
mysqli_options($link, MYSQLI_INIT_COMMAND, 'SET AUTOCOMMIT = 0')) {
die(
'设置 MYSQLI_INIT_COMMAND 失败');
}

if (!
mysqli_options($link, MYSQLI_OPT_CONNECT_TIMEOUT, 5)) {
die(
'设置 MYSQLI_OPT_CONNECT_TIMEOUT 失败');
}

if (!
mysqli_real_connect($link, 'localhost', 'my_user', 'my_password', 'my_db')) {
die(
'连接错误 (' . mysqli_connect_errno() . ') '
. mysqli_connect_error());
}

echo
'成功... ' . mysqli_get_host_info($link) . "\n";

mysqli_close($link);
?>

以上示例将输出

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

注意

注意:

MySQLnd 始终假设服务器默认字符集。此字符集在连接握手/身份验证期间发送,mysqlnd 将使用它。

Libmysqlclient 使用在my.cnf中设置的默认字符集,或者通过在调用mysqli_real_connect()之前但在mysqli_init()之后显式调用mysqli_options()来设置。

参见

添加注释

用户贡献的注释

此页面没有用户贡献的注释。
To Top