使用Zend连接到SQL进程



我正在尝试将我的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不知何故没有使用正确的主机参数。

你知道出了什么问题吗?

尝试使用

resources.db.params。

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

查看FAQ中的第二个问题。


我的错,这是关于DSN而不是DNS。不过,这就是问题所在。配置中的resources.db.params.host指令期望对数据库服务器的引用,而myprocess.db既不是DNS名称也不是IP地址。为此您可能需要localhost,但是您仍然会缺少DSN。我目前不知道如何在PHP中为MySQL和Zend设置DSN。请进一步查看此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"

我把我的最终解决方案贴在这里供将来参考:

结果是,数据库连接已经在工作。但是,我对mysql_real_escape_string()的调用失败了,由此产生的错误消息表明整个数据库连接失败了。

解决方案是简单地将上面的调用替换为Zend_DB_Adapter的quote(),然后突然一切都工作了。

为什么这在LAMP机器上工作而不是在共享服务器上,我不知道。但现在,这是一个足够好的解决方案!

相关内容

  • 没有找到相关文章

最新更新