更多: 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。 |
问题
如果 MySQL 密码包含美元符号字符“$”,PHP 将无法连接并发出如下错误:
Access denied for user 'username'@'hostname' (using password: YES)
通过其他客户端的连接工作正常。
日期:2020-09-17 00:10:27 来源:oir作者:oir
