通过MySQL套接字与Zend Framework连接

时间:2009-08-05 20:37:57

标签: mysql zend-framework sockets pdo

我最近开始使用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。

3 个答案:

答案 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'
  )
);