this is because it tries to use sockets with the string localhost this is documented en known
(PHP 5, PHP 7, PHP 8)
mysqli::real_connect -- mysqli_real_connect — 建立一个 MySQL 服务器连接
面向对象风格
$host
= ?
, string $username
= ?
, string $passwd
= ?
, string $dbname
= ?
, int $port
= ?
, string $socket
= ?
, int $flags
= ?
) : bool过程化风格
$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
这里可以设置连接参数:
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
<?php
class 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() 来指定。
this is because it tries to use sockets with the string localhost this is documented en known
Notice that when using "localhost" as hostname the port option might be ignored.
If you wish to connect thru a different port than default, substitute "127.0.0.1" for localhost.