0

我最近开始使用 Zend Framework。我开始在我的本地 XAMPP 服务器上进行开发,它运行良好,但是当我上传到我的 1and1 帐户时,我不断收到以下错误:

消息:SQLSTATE[HY000] [2002] 无法通过套接字 '/var/run/mysqld/mysqld.sock' 连接到本地 MySQL 服务器 (2)

我尝试将 application.ini 文件中的 resources.db.params.unix_socket 行更改为 phpinfo 中提到的不同行,但没有成功。我发现这里有人回答

MySQL 服务器是否与 Web 应用程序位于同一主机上?如果没有,则不能使用套接字连接,需要通过 TCP 连接。

我认为我的虚拟主机就是这种情况。如何将 ZF 更改为通过 TCP 连接?我目前正在使用 PDO_MYSQL。

4

3 回答 3

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()并收到此消息,则很可能是服务器配置问题。

尝试mysql.default_socket在 php.ini 中或在应用程序代码的顶部使用ini_set()调整设置

ini_set('mysql.default_socket','/path/to/real/socket.sock');

您必须弄清楚套接字文件在哪里。通常它是'/var/lib/mysql/mysql.sock',但我认为它取决于系统。

于 2009-08-05T20:42:55.577 回答
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 语句更改为“生产”以使用生产数据库设置并且它起作用了。相当令人沮丧。我想知道为什么没有读取环境变量。谢谢你的帮助。

于 2009-08-07T04:30:13.143 回答
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'
  )
);
于 2015-02-12T08:43:54.490 回答