在mysqli_connect上指定套接字选项

时间:2017-07-13 12:28:36

标签: 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通过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

1 个答案:

答案 0 :(得分:1)

通过将class mycl{ constructor(){ this.myarr=[]; } build(d){ const self = this; //keep a reference to the class here and use it to access class attributes. $.each(d,function(d,i){ let myd = ..... // Do some stuff with the data self.myarr.push(myd); }); } } 作为第一个参数传递给"127.0.0.1"构造函数,可以强制mysqli通过TCP连接到MySQL服务器。这会导致套接字参数被忽略。

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