使用mysqli连接数据库报错:

$conn = mysqli_connect("localhost","root",123);
报错:`Warning: mysqli_connect(): (HY000/2002): No such file or directory`

如果上面的连接地址是 localhost 就会报此错误,改成 127.0.0.1 后正常。

原因

  • 当主机填写为localhost时MySQL会采用 unix domain socket连接,
  • 当主机填写为127.0.0.1时MySQL会采用TCP/IP的方式连接。
  • 使用Unix socket的连接比TCP/IP的连接更加快速与安全。

这是MySQL连接的特性,可以参考官方文档的说明4.2.2. Connecting to the MySQL Server。

几种解决方法:

http://www.111cn.net/database/mysql/103734.htm
1.使用TCP/IP代替Unix socket。即在连接的时候将localhost换成127.0.0.1。
2.修改MySQL的配置文件my.cnf,指定mysql.socket的位置/var/lib/mysql/mysql.sock (你的mysql.socket路径)。
3.直接在php建立连接的时候指定my.socket的位置(官方文档:mysqli_connect)。比如:$db = new MySQLi(‘localhost’, ‘root’, ‘root’, ‘my_db’, ‘3306’, ‘/var/run/mysqld/mysqld.sock’)

尝试了下,macOS上使用如下方式连接成功

$conn = mysqli_connect("localhost","root",123,"test_base",3306,"/tmp/mysql.sock");
if ($conn == false){
    die("连接失败:".mysqli_connect_error());
}else{
    echo '连接成功';
}

额外的: php报错SQLSTATE[HY000] [2002] No such file or directory 也是这个原因。