更多: zhilu jiaocheng

解决方案

PHP 将双引号内的美元符号解释为变量名的开始,该变量名将被扩展。
此扩展将更改发送到 MySQL 的密码。

有3种方法可以避免这个问题:

  • 用反斜杠转义字符:“pa$$word”(实际密码为 pa$$word )
  • 使用单引号:'pa$$word'
  • 避免在密码中使用“$”字符。

为了帮助检测此类问题,一个好的做法是在启用错误报告的情况下运行 PHP,并将其设置为包含 E_STRICT(或者 E_ALL 用于 PHP 5.4.0 及更高版本)。
此设置将通知我们未定义的变量,这可能会揭示问题。

PHP 错误级别

PHP 提供了几个内置常量来描述不同的错误级别。
下表包括一些更重要的。

常量描述
E_ERROR致命的运行时错误。 执行被暂停。
E_WARNING非致命的运行时错误。
E_NOTICE关于可能错误的运行时通知。
E_USER_ERROR用户生成的致命错误。
E_USER_WARNING非致命的用户生成警告。
E_USER_NOTICE用户生成的通知。
E_COMPILE_ERROR致命的编译时错误。
E_PARSE编译时解析错误。
E_STRICT建议更改以确保向前兼容性。
E_ALL所有错误,除了 PHP 5.4 之前的 E_STRICT。
使用PHP 连接 MySQL时出错 Access denied for user 'username'@'hostname' (using password: YES)

问题

如果 MySQL 密码包含美元符号字符“$”,PHP 将无法连接并发出如下错误:

Access denied for user 'username'@'hostname' (using password: YES)

通过其他客户端的连接工作正常。

日期:2020-09-17 00:10:27 来源:oir作者:oir