从Zend教程开始 - Zend_DB_Adapter抛出异常:"SQLSTATE [HY000] [2002]没有这样的文件或目录"

Oli*_*ver 69 zend-framework

我开始用德语中的"Zend Framework in Action"一书学习Zend Framework.

就在那里它开始变得有趣我的PHP单元测试抛出此错误:"Zend_Db_Adapter_Exception:SQLSTATE [HY000] [2002]没有这样的文件或目录"

我无法在谷歌找到任何提示.我做了书中的所有事情.任何人都可以给我一个提示在哪里搜索我的错?

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

Pas*_*TIN 74

我会说你从PHP连接到MySQL有问题...

有点像PHP试图找到一些套接字文件,而不是找到它,可能吗?
(我有几次这个问题 - 不知道我得到的错误恰恰是这个问题)


如果你正在运行一些基于Linux的系统,那么应该有一个my.cnf文件,用于配置MySQL - 在我的Ubuntu上,它就在/etc/mysql/.

在此文件中,可能存在以下内容:

socket = /var/run/mysqld/mysqld.sock
Run Code Online (Sandbox Code Playgroud)


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
Run Code Online (Sandbox Code Playgroud)

(您需要重新启动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();
}
Run Code Online (Sandbox Code Playgroud)

如果不是,问题肯定不是ZF,而是PHP的配置/安装问题.

如果是的......那么,这意味着您对ZF有疑问,并且您需要向我们提供有关您的设置的更多信息(例如您的DSN?)

  • YEAH!非常感谢!!!如果没有这个暗示,我会坐在这里几个小时......谢谢你的快速回复.问题:我有我的Mac上安装MAMP(我的Ubuntu的服务器当前的),然后由于某种原因,我的单元测试使用/etc/php.ini中,而不是/Applicaton/MAMP/:bla:/php.ini所以继续我的代码我只是简单地将套接字路径从Mamp-ini复制到etc/php.ini中它就可以了! (6认同)
  • 感谢提示和评论,我也在Mac上,遇到了同样的问题.我没有使用任何php.ini,所以我只是运行"sudo ln -s /tmp/mysql.sock /var/mysql/mysql.sock",现在没关系. (3认同)
  • 这里的派对已经很晚了,但是想对@PascalMARTIN这篇帖子表示非常感谢.生命保护! (2认同)

lij*_*nma 36

不要假设你的unix_socket彼此不同,试着找到它.

首先,获取unix_socket位置.

$ mysql -u root -p
Run Code Online (Sandbox Code Playgroud)

输入您的mysql密码并从命令行登录您的mysql服务器.

mysql> show variables like '%sock%';
+---------------+---------------------------------------+
| Variable_name | Value                                 |
+---------------+---------------------------------------+
| socket        | /opt/local/var/run/mysql5/mysqld.sock |
+---------------+---------------------------------------+
Run Code Online (Sandbox Code Playgroud)

你的unix_soket可能不同.

然后更改您的php.ini,php.ini从中找到您的文件

<? phpinfo();
Run Code Online (Sandbox Code Playgroud)

你可能安装了许多不同版本的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
Run Code Online (Sandbox Code Playgroud)

然后重启你的apache或php-fpm.


Jor*_*nas 15

尝试在db设置文件中设置host = 127.0.0.1,它对我有用!:)

希望能帮助到你!


ris*_*dar 6

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

在mac osx xampp中,为了解决这个问题,你已经创建了目录/ var/mysql的符号链接,这里是如何实现的

cd /var/mysql && sudo ln -s /Applications/XAMPP/xamppfiles/var/mysql/mysql.sock
Run Code Online (Sandbox Code Playgroud)

如果目录/ var/mysql不存在,我们必须创建它

sudo mkdir /var/mysql
Run Code Online (Sandbox Code Playgroud)

  • 你应该考虑为OSX PHP创建一个`php.ini`文件(`sudo cp /private/etc/php.ini.default/private/etc/php.ini`),然后查找`pdo_mysql .default_socket`和set为:`pdo_mysql.default_socket =/Applications/MAMP/tmp/mysql/mysql.sock`(对于MAMP). (4认同)
  • 也适用于mamp; cd/var/mysql && sudo ln -s /Applications/MAMP/tmp/mysql/mysql.sock (3认同)