从Zend教程开始-Zend_DB_Adapter引发异常:“ SQLSTATE [HY000] [2002]没有这样的文件或目录”


69

我已经开始用德语的“ Zend Framework in Action”一书来学习Zend Framework。

就在开始变得有趣的地方,我的PHP单元测试抛出了此错误:“ Zend_Db_Adapter_Exception:SQLSTATE [HY000] [2002]没有这样的文件或目录”

我无法通过Google搜索找到任何提示。我做了所有的事情,就像书中那样。谁能给我提示到哪里寻找故障?

这是一个常见的初学者错误吗?


68
为MySQL主机使用IP地址
Nguyen

3
@阮你是个男人!您提供了18.3万哈哈的帮助,远远超过了花花公子
嘘2014年

8
@Nguyen-也感谢我为此进行了修复(将“ localhost”更改为127.0.0.1)。这是在Laravel下的PDO中进行的,因此它并不特定于Zend Framework。
scipilot 2014年

2
谢谢!它也对我有帮助。重要提示:请勿使用http://,仅使用IP。
巴特洛梅耶扎莱夫斯基

2
重新启动MySQL服务器,为我做了工作!
happyhardik 2014年

Answers:


74

我想说的是从PHP连接到MySQL时遇到问题...

像PHP这样的东西试图找到一些套接字文件,却没有找到,也许吗?
(我有过几次这个问题-不确定我得到的错误就是这个错误)


如果您运行的是基于Linux的系统,则应该在my.cnf某处放置一个文件,该文件用于配置MySQL-在我的Ubuntu上,该文件位于/etc/mysql/

在此文件中,可能会出现以下内容:

socket = /var/run/mysqld/mysqld.sock


PHP需要使用相同的文件-并且,取决于您的分发版本,默认文件可能与MySQL使用的文件不同。

在这种情况下,将这些行添加到php.ini文件中可能会有所帮助:

mysql.default_socket = /var/run/mysqld/mysqld.sock
mysqli.default_socket = /var/run/mysqld/mysqld.sock
pdo_mysql.default_socket = /var/run/mysqld/mysqld.sock

(您需要重新启动Apache,以便对 php.ini考虑在内)

对于Zend Framework使用的PDO,最后一个应该足够了-但前两个不会造成任何损害,并且对于其他应用程序可能很有用。


如果这没有帮助:是否可以在另一个脚本中使用PDO连接到数据库,而这完全独立于Zend Framework?

即做了类似的工作(引用)

$dsn = 'mysql:dbname=testdb;host=127.0.0.1';
$user = 'dbuser';
$password = 'dbpass';

try {
    $dbh = new PDO($dsn, $user, $password);
} catch (PDOException $e) {
    echo 'Connection failed: ' . $e->getMessage();
}

如果不是,则问题肯定不是ZF引起的,而是PHP的配置/安装问题。

如果是的话...那么,这意味着您在ZF方面遇到了问题,您需要向我们提供有关您的设置的更多信息(例如DSN,例如?)


6
是的 非常感谢!!!没有这个提示,我本来会坐在这里几个小时...感谢您的迅速答复。问题:我已经在Mac上安装了MAMP(我的ubuntu服务器当前已关闭),由于某种原因,我的单元测试使用了/etc/php.ini而不是/Applicaton/MAMP/:bla:/php.ini继续我的代码,我只是简单地将Mamp-ini的套接字路径复制到etc / php.ini中,就可以了!
奥利弗

1
很高兴看到我可以提供帮助,并且您解决了您的问题:-) ;; 感谢您对“为什么”无效的评论和解释!玩得开心;-)
Pascal MARTIN 2010年

3
感谢您的提示和评论,我也在Mac上遇到了同样的问题。我不使用任何php.ini,所以我只运行了“ sudo ln -s /tmp/mysql.sock /var/mysql/mysql.sock”,现在可以了。
Mathias

1
非常感谢,这很奇怪,无论如何以这种方式解决。
Sswater Shi

2
超级晚在这里参加聚会,但想对@PascalMARTIN的这篇文章表示感谢。救生员!
John Blythe 2014年

36

不要假设您的unix_socket彼此不同,请尝试查找它。

首先,获取您的unix_socket位置

$ mysql -u root -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”获取的;

更改您的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
我遇到了完全相同的问题:我在mysql.default_socket中有一个空值,因此我已将值更改为真实套接字位置,如lijinma指出的那样,它起作用了!谢谢!
nefski 2014年


6

在osx中​​运行magento索引器时出现了这个问题。是的,通过pdo连接到mysql时,它与php问题有关

在Mac OS X XAMPP中,要解决此问题,您必须创建指向目录/ var / mysql的符号链接,这是方法

cd /var/mysql && sudo ln -s /Applications/XAMPP/xamppfiles/var/mysql/mysql.sock

如果目录/ var / mysql不存在,则必须使用

sudo mkdir /var/mysql

3
也适用于mamp;cd / var / mysql && sudo ln -s /Applications/MAMP/tmp/mysql/mysql.sock
Mehmet Emre

4
您应该考虑php.ini为OSX PHP(sudo cp /private/etc/php.ini.default /private/etc/php.ini)创建一个文件,然后查找pdo_mysql.default_socket并设置为:(pdo_mysql.default_socket=/Applications/MAMP/tmp/mysql/mysql.sock对于MAMP),而不是这种讨厌的技巧。
TCB13

cd / var / mysql && sudo ln -s /Applications/MAMP/tmp/mysql/mysql.sock也适用于我的MAMP / Laravel设置。
sotoz,2015年

4

我也遇到了这个问题,只是在IP地址保存我之后添加了端口号

$dsn = 'mysql:dbname=sms_messenger;host=127.0.0.1:8889';
$user = 'root';
$password = 'root';

这适用于Mac OS

如果您不知道您的mysql端口号,则
可以在MAMP主页上轻松找到该端口号

要么

在运行MAMP服务器以将终端切换到以下位置时键入以下命令 mysql

OMBP:mamp Omal$ /Applications/MAMP/Library/bin/mysql --host=localhost -uroot -proot

然后输入

mysql> SHOW GLOBAL VARIABLES LIKE 'PORT';

1

此错误是因为mysql试图通过错误的套接字文件进行连接

对MAMP服务器尝试此命令

cd /var/mysql && sudo ln -s /Applications/MAMP/tmp/mysql/mysql.sock

要么

cd /tmp && sudo ln -s /Applications/MAMP/tmp/mysql/mysql.sock

和XAMPP服务器的此命令

    cd /var/mysql && sudo ln -s /Applications/XAMPP/tmp/mysql/mysql.sock

要么

    cd /tmp && sudo ln -s /Applications/XAMPP/tmp/mysql/mysql.sock

1

看起来mysql服务无法正常工作或已停止。您可以使用以下命令(在Ubuntu中)启动它:

service mysql start

它应该工作!如果您使用的操作系统不是Ubuntu,请使用适当的方法启动mysql。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.