Php 如何通过mysqli连接到不同的MySQL端口?

Php 如何通过mysqli连接到不同的MySQL端口?,php,mysqli,port,Php,Mysqli,Port,在PHP中,它表示 mysqli mysqli\u connect([string$host=ini\u get(“mysqli.default\u host”) [,string$username=ini\u get(“mysqli.default\u user”)[,string$passwd =ini_get(“mysqli.default_pw”)[,string$dbname=”“[,int$port=ini_get(“mysqli.default_port”)[,string$soc

在PHP中,它表示

mysqli mysqli\u connect([string$host=ini\u get(“mysqli.default\u host”) [,string$username=ini\u get(“mysqli.default\u user”)[,string$passwd =ini_get(“mysqli.default_pw”)[,string$dbname=”“[,int$port=ini_get(“mysqli.default_port”)[,string$socket= ini_-get(“mysqli.default_-socket”):/

但当我这么做的时候

$dblink = new \mysqli($c['host'], $c['user'], $c['pass'], $c['name'], $c['port']);
它连接到默认端口。 只有在我这么做之后

$dblink = new \mysqli($c['host'].":".$c['port'], $c['user'], $c['pass'], $c['name'], $c['port']);

是否连接到正确的端口。

连接到mysql后,您可以查看连接信息

$dblink = new \mysqli($c['host'], $c['user'], $c['pass'], $c['name'], $c['port']);
if ($dblink->connect_error) {
    die('Connect Error (' . $dblink->connect_errno . ') '. $dblink->connect_error);
}
echo $dblink->host_info;
文件中提到:

主机

可以是主机名或IP地址。将
NULL
值或字符串
“localhost”
传递到此参数时,假定为本地主机。如果可能,将使用管道代替TCP/IP协议

这是底层
libmysql
库的行为。在弃用函数的文档中也提到了它,其中还提供了解决方案:

注意:

每当您将
“localhost”
“localhost:port”
指定为服务器时,MySQL客户端库将覆盖此设置并尝试连接到本地套接字(Windows上的命名管道)。如果要使用TCP/IP,请使用
“127.0.0.1”
而不是
“localhost”

该行为在的文档中也有详细说明,但这一次更加模糊:

注意:仅限Unix:

当主机名设置为“localhost”时,通过域套接字与服务器建立连接。如果根据
libmysqlclient
编译
PDO_MYSQL
,则套接字文件的位置位于
libmysqlclient
的编译位置。如果根据
mysqlnd
编译
PDO_-MYSQL
,则可以通过
PDO_-MYSQL.default_-socket设置设置默认套接字


不管别人怎么说,你是对的。 根据我的测试,结果如下:

  • 如果将localhost保留为空,而不考虑端口,则它将连接到默认端口,而不考虑最后一个参数
  • 如果将字符串“localhost”作为localhost,则不管最后一个参数是什么,它仍将连接到默认端口
  • 只有将localhost设置为127.0.0.1或MYSQL服务器的任何其他IP时,才会接受并使用最后一个参数

  • 因此,我的解决方案是,如果用户选择一个空的本地主机,则强制本地主机为“127.0.0.1”,这样连接将被强制使用该端口。

    您已经回答了自己的问题……您的情况下,
    $c['host']=='localhost'
    ?是的,@axiac,但是文档说这个端口可以作为一个参数来引用。没有抛出错误/异常。看起来它只是忽略了mysqli构造函数中的port参数。