1

我一直在本地 Mac MAMP 安装和另一个远程红帽 linux 服务器上使用phpdao2.6 。我最近迁移到 EC2 amazon ubuntu 风格并安装了 LAMP 设置。

突然,我发现我遇到了 mysql 连接错误,但并非总是如此:

[09-Jul-2013 21:09:11 Australia/Sydney] PHP Warning:  mysql_real_escape_string(): Access denied for user 'ec2-user'@'localhost' (using password: NO) in /var/www/html/mycobber/class/sql/SqlQuery.class.php on line 40

[09-Jul-2013 21:09:11 Australia/Sydney] PHP Warning:  mysql_real_escape_string(): A link to the server could not be established in /var/www/html/mycobber/class/sql/SqlQuery.class.php on line 40

如果我使用的是 MyObjectMySqlExtDAO.class.php 中的函数,我只会收到这些错误

$sql .= 'and ca.enabled = ? ';

.....

$sqlQuery = new SqlQuery($sql);

$sqlQuery -> set('Y');

样式语法。如果我将此语法更改为 ..

$sql .= " and ca.enabled = 'Y' ";

它工作正常。我不知道为什么会发生这种情况,并且我不想使用第二种方法,因为输入没有经过消毒。

我怀疑这个问题是某种 php 设置。

在我正在使用的 EC2 实例上:

php: 5.3.26
apache: Apache/2.2.24 (Amazon)

我的本地 MAMP 设置是

php: 5.4.10
apache: Apache/2.2.23 (Unix) 

有什么想法吗?

4

2 回答 2

1

这样转义可以考虑到当前连接字符集,mysql_real_escape_string需要与数据库的活动连接。根据链接的手册页:

如果未指定链接标识符,mysql_connect()则假定打开的最后一个链接。如果没有找到这样的链接,它将尝试创建一个,就好像mysql_connect()在没有参数的情况下被调用一样。如果未找到或建立连接,则会生成 E_WARNING 级别错误。

重点补充。

在这个 DAO 库中,连接是通过调用ConnectionFactory::getConnection(). 在执行占位符替换之前,您需要确保存在活动连接。

请注意,该库的代码质量还有待改进。它也被硬编码以使用已弃用 mysql_的函数系列。您可能不应该依赖这个库在 PHP 的未来版本中可用。

于 2013-07-10T17:10:38.083 回答
0

此问题的解决方案是将连接作为 mysql_real_escape_string 函数的第二个参数包含在内。看起来在 EC2 ubuntu 实例上它不喜欢没有这个。

mysql_real_escape_string($string, $resource)

http://php.net/manual/en/function.mysql-real-escape-string.php

于 2013-07-11T23:04:47.177 回答