使用Zend连接到SQL进程

时间:2011-08-04 23:32:32

标签: mysql zend-db nearlyfreespeech

我正在尝试将我的Zend应用程序连接到在共享服务器上运行的MySQL进程。基本配置应该没问题,因为它正在使用LAMP服务器。

问题是,我需要将主机指定为sql进程:myprocess.db,而不是localhost

resources.db.adapter = PDO_MYSQL
resources.db.params.charset = "utf8"
resources.db.params.host = mysqlprocess.db
resources.db.params.username = username
resources.db.params.password = password
resources.db.params.dbname = dbname

然而,当我这样做时,我明白了:

Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: 
Can't connect to local MySQL server through socket 'please_see_the_faq' (2) 
in /f5/metamusic/protected/application/controllers/SearchController.php on line 418

我正在使用的主机是NearlyFreeSpeech,当尝试连接到SQL而不指定您感兴趣的进程时,显然会触发此消息: http://faq.nearlyfreespeech.net/section/mysql/mysqllocalhost#mysqllocalhost

使用相同的详细信息和mysql_connect($server, $user)可以正常工作,因此看起来Zend在某种程度上没有使用正确的主机参数。

任何想法出了什么问题?任何帮助将不胜感激。

3 个答案:

答案 0 :(得分:0)

尝试使用

resources.db.params.host = myprocess.db

答案 1 :(得分:0)

db config中的主机必须指向数据库服务器。 localhost127.0.0.1是与应用程序位于同一服务器上的数据库的引用。在托管环境中,您通常在远程服务器上安装服务器,因此主机必须是主机的IP地址或DNS名称。

检查FAQ中的第二个问题。

<强>更新
我的坏,这是关于DSN而不是DNS。不过,这就是问题所在。配置中的resources.db.params.host指令需要引用数据库服务器,而myprocess.db既不是DNS名称也不是IP地址。你可能需要localhost,但是你仍然会错过DSN。我目前看不到你如何在PHP中为MySQL设置DSN,因此Zend。请进一步查看此MYSQL DSN

更新2 套接字是正确的,这是相关的。我认为问题是Zend PDO_MYSQL适配器。 Zend将此直接汇集到PDO()。我在上面提到的这些额外的配置选项(MYSQL DSN)在Zend实现中缺失。虽然PDO_MYSQL适配器会覆盖connect()方法,但它不会查找此选项。

但是,有另一个适配器mysqli直接连接到MySQL,实际上与使用mysql_connect()的测试相同。它使用mysqli_real_connect()代替,并且该连接可能理解套接字的进程名称。因此,您可以在配置中尝试以下内容:

resources.db.adapter = "mysqli"

答案 2 :(得分:0)

我在这里发布我的最终解决方案以供将来参考:

事实证明,数据库连接已经在运行。但是,我对mysql_real_escape_string()的调用失败,并且生成的错误消息表明整个数据库连接都失败了。

解决方案只是用Zend_DB_Adapter的quote()替换上面的调用,突然一切正常。

为什么这适用于LAMP机器而不是共享服务器,我不知道。但就目前而言,这是一个足够好的解决方案!