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

时间:2010-03-09 19:39:43

标签: zend-framework

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

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

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

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

7 个答案:

答案 0 :(得分:74)

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

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


如果您正在运行一些基于Linux的系统,那么在我的Ubuntu上应该有一个用于配置MySQL的my.cnf文件,它位于/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?)

答案 1 :(得分: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_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。

答案 2 :(得分:15)

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

希望它有所帮助!

答案 3 :(得分: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 :(得分:4)

我也遇到了这个问题&amp;简单地说,通过在IP地址后添加端口号保存了我。

from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC


...


url = "https://readability-score.com/"
text = "Hello hello hello, this is a test"

driver.get(url)
WebDriverWait(driver, 5).until(
    EC.presence_of_element_located((By.ID, "text_to_score"))
)  # Wait until the `text_to_score` element appear (up to 5 seconds)
driver.find_element_by_id("text_to_score").clear()
driver.find_element_by_id('text_to_score').send_keys(text)

这适用于Mac OS

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

OR

在运行MAMP服务器时键入以下命令以将终端切换为$dsn = 'mysql:dbname=sms_messenger;host=127.0.0.1:8889'; $user = 'root'; $password = 'root';

mysql

然后输入

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

答案 5 :(得分: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

答案 6 :(得分:1)

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

service mysql start

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