php - 在 mysqli_connect 上指定套接字选项

标签 php mysql mysqli

我有两个 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/

相关文章:

php - 为什么我的表格中只显示一个结果?

PHP MySQLi : Array to string conversion

php - jquery将变量添加到$.get url参数

php - 事务中的多个查询并使用 php 提交/回滚

python mysql连接问题

php - 上传图片大于 1.0MB 时 MySQL 服务器已经消失

php - 在html表中显示数据库表中的所有数据

php - 如何在 URL 中传递 POST 参数?

php - TinyMCE Editor - 如何集成自定义滚动条

php - CartoDB - SQL API - 使用 php 发布请求