Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/266.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在mysqli_connect上指定套接字选项_Php_Mysql_Mysqli - Fatal编程技术网

Php 在mysqli_connect上指定套接字选项

Php 在mysqli_connect上指定套接字选项,php,mysql,mysqli,Php,Mysql,Mysqli,我有两个mysql.sock文件 一个位于/opt/lampp/var/mysql/mysql.sock 另一个位于/var/run/mysqld/mysqld.sock 我想使用第一个mysql.sock文件创建连接 我还在php.ini中设置了默认的_套接字 但它总是连接到第二个 程序不会出错,即使我使用了错误的路径mysql.sock 这是我的代码: <?php $servername = "127.0.0.1"; $username = "my_use

我有两个
mysql.sock
文件

一个位于
/opt/lampp/var/mysql/mysql.sock

另一个位于
/var/run/mysqld/mysqld.sock

我想使用第一个mysql.sock文件创建连接

我还在
php.ini
中设置了默认的_套接字

但它总是连接到第二个

程序不会出错,即使我使用了错误的路径
mysql.sock

这是我的代码:

<?php
$servername = "127.0.0.1";
$username = "my_username";
$password = "my_password";
$database = "";
$port = "3306";
$socket = "/opt/lampp/var/mysql/mysql.sock";

// Create connection
$conn = new mysqli($servername, $username, $password, $database, $port, $socket);

//Check the host info
echo $conn->host_info."\n";

// Check connection
if ($conn->connect_errno) {
    printf("Connect failed: %s\n", $conn->connect_error);
    exit();
}

$conn->query("set character set utf8");

//Which socket did I connect?
$result = $conn->query("SHOW VARIABLES WHERE Variable_name = 'socket';");
$row = mysqli_fetch_assoc($result);
echo $row['Value']."\n";

//Check the default_socket in php.ini file
echo ini_get("mysqli.default_socket");
?>
输出为

SRWXRWX 1 mysql 0 7月 13 18:10/opt/lampp/var/mysql/mysql.sock

SRWXRWX 1 mysql 0 7月 6 21:06/var/run/mysqld/mysqld.sock

通过将
“127.0.0.1”
作为第一个参数传递给
mysqli
构造函数,可以强制mysqli通过TCP连接到MySQL服务器。这会导致忽略套接字参数


要强制通过UNIX套接字建立连接,请传递
NULL
localhost
作为第一个参数。

您希望输出是什么?(这是几乎所有问题的关键信息;没有它,我怎么知道你认为你的问题是什么?@dcsohl抱歉,我没有解释清楚。我想连接第一个套接字文件,
/opt/lampp/var/mysql/mysql.sock
。我修改了
php.ini
,并将default_socket设置为
/opt/lampp/var/mysql/mysql.sock
。但它不起作用。它总是连接到第二个套接字文件,
/var/run/mysqld/mysqld.sock
。如果我连接正确,第二个输出文件将是
/opt/lampp/var/mysql/mysql.sock
,对吗?您是否考虑过您可能根本没有通过套接字连接,而是通过环回接口上的端口3306连接?在
newmysqli
行之后,添加以下调试语句:
echo$conn->host\u info。“\n”并请使用新信息更新问题(除了注释)。其他想要回答的人不必阅读评论来获取此类所需信息。@dcsohl实际上,我已经考虑过了。程序不会出错,即使我使用了错误的套接字路径。我添加了
echo$conn->host_信息。“
$conn=newmysqli($servername、$username、$password、$database、$port、$socket)之后。通过TCP/IP的输出是
127.0.0.1
。您能在问题中包含
ls-l/opt/lampp/var/mysql/mysql.sock/var/run/mysqld/mysqld.sock的输出吗?(我怀疑其中一个是一个符号链接…)它起作用了!!非常感谢你。我为此工作了一整天。
ls -l /opt/lampp/var/mysql/mysql.sock /var/run/mysqld/mysqld.sock