为什么我不能通过终端运行有效的PDO连接?

时间:2015-08-14 22:26:37

标签: php pdo terminal

我在浏览器中运行的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

这里发生了什么?

2 个答案:

答案 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文件。您可以通过运行

找到您的Web服务器php.ini文件
phpinfo();

来自通过Web服务器加载的PHP文件。您可以通过运行以下

找到命令行php.ini文件
$ php --ini

如果无法修复命令行php.ini文件,请考虑通过127.0.0.1而不是localhost连接到MySQL服务器。当您使用IP地址时,PHP应尝试通过网络而不是套接字文件进行连接。