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 协议。如果一起提供了主机名和端口号,例如 localhost:3308,则使用 TCP/IP 协议。

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 本机驱动程序和 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(
'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

备注

注意:

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

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

参见

添加备注

用户贡献的备注 2 个备注

Pom
14 年前
请注意,当使用“localhost”作为主机名时,端口选项可能会被忽略。

如果您希望通过除默认端口之外的其他端口进行连接,请用“127.0.0.1”替换 localhost。
php-nospam325123 at brainpower dot no-ip dot org
13 年前
这是因为它尝试使用字符串 localhost 与套接字进行通信。这已在文档中记录并广为人知。
To Top