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