我最近开始使用Zend Framework。我开始在我的本地XAMPP服务器上进行开发,但是当我上传到我的1and1帐户时,我一直收到以下错误:
消息:SQLSTATE [HY000] [2002]不能 通过连接到本地MySQL服务器 socket'/var/run/mysqld/mysqld.sock' (2)
我尝试将application.ini文件中的resources.db.params.unix_socket行更改为phpinfo中提到的不同行但没有成功。我发现有人回答了here
MySQL服务器是否在同一主机上 作为Web应用程序?如果没有,你 不能使用套接字连接,和 将需要通过TCP连接。
我认为我的网络主机就是这种情况。如何更改ZF以通过TCP连接?我目前正在使用PDO_MYSQL。
答案 0 :(得分:4)
如何连接到MySQL取决于您传递给mysql_connect()的参数。如果你传递一个文件路径,即。 /var/run/mysqld/mysqld.sock
,它将尝试套接字连接。如果您传递一个主机名,它将尝试TCP连接。
你需要找到mysql服务器的主机名(或IP),并像这样连接到它:
mysql_connect('127.0.0.1:3306',$username,$password);
赔率适用于ZF,您只需在存储数据库设置的配置文件中或使用host
设置连接到数据库时指定:
$db = new Zend_Db_Adapter_Pdo_Mysql(array(
'host' => '127.0.0.1',
'username' => 'webuser',
'password' => 'xxxxxxxx',
'dbname' => 'test'
));
编辑:如果 将正确的主机名/端口作为主机参数传递给mysql_connect()
并收到此消息,则很可能是服务器配置问题。
尝试使用ini_set()
在php.ini或应用程序代码顶部调整mysql.default_socket
设置
ini_set('mysql.default_socket','/path/to/real/socket.sock');
你必须弄清楚套接字文件的位置。通常它是'/var/lib/mysql/mysql.sock',但我认为它取决于系统。
答案 1 :(得分:1)
我离开了这条线:
defined('APPLICATION_ENV')
|| define('APPLICATION_ENV', (getenv('APPLICATION_ENV') ? getenv('APPLICATION_ENV') : 'development'));
在我的index.php中,但已将public / .htaccess更改为
SetEnv APPLICATION_ENV production
看起来.htaccess没有被阅读。我将index.php中的else语句更改为'production'以使用生产数据库设置并且它工作正常。相当令人沮丧。我想知道为什么没有读取环境变量。谢谢你的帮助。
答案 2 :(得分:0)
Zend Framework在db params unix_socket
中有选项,只需使用它
$config= array(
'db' => array(
'host' => 'localhost',
'username' => 'user',
'password' => 'pass',
'dbname' => 'dbname',
'dbprefix' => '',
'unix_socket' => '/var/lib/mysqld/mysqld.sock'
)
);