在浏览器中运行的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
这是怎么回事?
你的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_socket可以是不同的
然后修改你的php.ini,从
找到你的php.ini文件<? phpinfo();
你可能安装了许多不同版本的php,所以请不要假设你的php.ini文件的位置,从你的'phpinfo';
修改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
看起来您正在使用localhost
作为MySQL数据库的连接字符串。当MySQL看到localhost
时,它将其解释为"使用MySQL"。袜子"文件。PHP告诉你它找不到mysql。袜子文件。
最可能的原因是您的web服务器和命令行PHP配置为使用不同的php.ini
文件,而这些php.ini
文件配置不同的mysql.sock
文件。你可以通过运行
php.ini
文件phpinfo();
从一个PHP文件通过web服务器加载。通过运行以下命令
,可以找到命令行php.ini
文件$ php --ini
如果你不能修复你的命令行php.ini
文件,考虑通过127.0.0.1
而不是localhost
连接到MySQL服务器。当您使用IP地址时,PHP应该尝试通过网络而不是套接字文件进行连接。