我有两个 mysql.sock
文件。
一个在/opt/lampp/var/mysql/mysql.sock
。
另一个在/var/run/mysqld/mysqld.sock
。
我想使用第一个 mysql.sock 文件创建一个连接。
我还在 php.ini
中设置了 default_socket。
但它总是连接到第二个。
程序不会出错,即使我使用错误的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");
?>
输出是:
127.0.0.1 via TCP/IP
/var/run/mysqld/mysqld.sock
/opt/lampp/var/mysql/mysql.sock
如何解决这个问题?
更新:
ls -l /opt/lampp/var/mysql/mysql.sock /var/run/mysqld/mysqld.sock
输出是
srwxrwxrwx 1 mysql mysql 0 7月 13 18:10 /opt/lampp/var/mysql/mysql.sock
srwxrwxrwx 1 mysql mysql 0 7月 6 21:06 /var/run/mysqld/mysqld.sock
最佳答案
通过将 "127.0.0.1"
作为第一个参数传递给 mysqli
构造函数,您可以强制 mysqli 通过 TCP 连接到 MySQL 服务器。这会导致套接字参数被忽略。
要强制通过 UNIX 套接字建立连接,请传递 NULL
或 "localhost"
作为第一个参数。
关于php - 在 mysqli_connect 上指定套接字选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45080641/