0

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

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

4

3 回答 3

0

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

检查常见问题解答中的第二个问题。

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

更新 2 您对套接字是正确的,并且这是相关的。我认为问题出在 Zend PDO_MYSQL 适配器上。Zend 将其直接传递给 PDO()。Zend 实现中缺少我上面提到的附加配置选项(MYSQL DSN)。尽管 PDO_MYSQL 适配器覆盖了 connect() 方法,但它不会查找此选项。

但是,还有另一个适配器mysqli直接连接到 MySQL,实际上与您使用mysql_connect(). 它mysqli_real_connect()改为使用,并且该连接可能会理解套接字的进程名称。因此,您可以在配置中尝试以下操作:

resources.db.adapter = "mysqli"
于 2011-08-12T23:17:36.687 回答
0

尝试使用

resources.db.params.host = myprocess.db

于 2011-08-05T04:31:06.413 回答
0

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

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

解决方案是简单地将上述调用替换为 Zend_DB_Adapter's quote(),然后突然一切正常。

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

于 2011-08-13T18:18:39.943 回答