我在浏览器中运行的index.php如下所示:
<?php
$dbh = new PDO(...whatever
它很好用。我可以做任何事。
在终端中运行,如:
shell> php index.php
我收到一些错误:
Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[HY000] [2002] No such file or directory' in /Library/WebServer/Documents/index.php:3
Stack trace:
#0 /Library/WebServer/Documents/index.php(3): PDO->__construct('mysql:host=loca...', 'root', 'frekinpassword')
#1 {main}
thrown in /Library/WebServer/Documents/index.php on line 3
这里发生了什么?
答案 0 :(得分:4)
我想,你的unix_socket发生了变化,你没有改变你的php客户端php.ini
首先,获取unix_socket位置。
$ mysql -uroot -p
输入您的mysql密码并从命令行登录您的mysql服务器。
mysql> show variables like '%sock%';
+---------------+---------------------------------------+
| Variable_name | Value |
+---------------+---------------------------------------+
| socket | /opt/local/var/run/mysql5/mysqld.sock |
+---------------+---------------------------------------+
你的unix_soket可能不同。
然后更改你的php.ini,从
中找到你的php.ini文件<? phpinfo();
你可能安装了许多不同版本的php,所以请不要假设你的php.ini文件位置,从你的phpinfo&#39 ;;
获取它更改你的php.ini:
mysql.default_socket = /opt/local/var/run/mysql5/mysqld.sock
mysqli.default_socket = /opt/local/var/run/mysql5/mysqld.sock
pdo_mysql.default_socket = /opt/local/var/run/mysql5/mysqld.sock
然后重启你的apache或php-fpm。
答案 1 :(得分:1)
看起来您正在使用localhost
作为MySQL数据库的连接字符串。当MySQL看到localhost
时,它会将其解释为“使用mysql.sock”文件。 PHP告诉你它无法找到mysql.sock文件。
最可能的原因是您的Web服务器和命令行PHP配置为使用不同的php.ini
文件,而这些php.ini
文件具有不同配置的mysql.sock
文件。您可以通过运行
php.ini
文件
phpinfo();
来自通过Web服务器加载的PHP文件。您可以通过运行以下
找到命令行php.ini
文件
$ php --ini
如果无法修复命令行php.ini
文件,请考虑通过127.0.0.1
而不是localhost
连接到MySQL服务器。当您使用IP地址时,PHP应尝试通过网络而不是套接字文件进行连接。