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

问题描述 投票:69回答:7

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

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

我无法通过Google搜索找到任何提示。我做了书中所做的一切。谁能给我一个关于在哪里搜索错误的提示?

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

zend-framework
7个回答
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?

即做像这样的工作(quoting)

$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?)


35
投票

不要假设你的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_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

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


15
投票

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

希望能帮助到你!


6
投票

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

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

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

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

sudo mkdir /var/mysql

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

© www.soinside.com 2019 - 2024. All rights reserved.