【问题标题】:From php a Mysql connection error when using parameters in phpdao2.6phpdao2.6中使用参数时从php出现Mysql连接错误
【发布时间】:2023-04-07 20:25:01
【问题描述】:

我一直在本地 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) 

有什么想法吗?

【问题讨论】:

  • 这个错误表明你的密码错误 用户'ec2-user'@'localhost'的访问被拒绝(使用密码:否)
  • 无法建立到服务器的链接 此错误确认此错误,例如主机名、用户名、密码

标签: php mysql php-dao


【解决方案1】:

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

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

添加了重点。

在此 DAO 库中,通过调用 ConnectionFactory::getConnection() 打开连接。您需要确保在执行占位符替换之前有一个活动连接。

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

【讨论】:

  • 嗨,Charles,是的,我注意到了这一点,但在快速开发阶段使用了“从表中构建 php 对象”组件,稍后我将更换该库。感谢您的意见。
【解决方案2】:

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

mysql_real_escape_string($string, $resource)

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

【讨论】:

    猜你喜欢
    • 2019-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-25
    • 2015-12-17
    • 2013-12-03
    • 1970-01-01
    相关资源
    最近更新 更多