美元 ($) 登录密码字符串被视为变量

2022-08-30 10:41:21

花了一些时间对 PHP/MySQL Web 应用程序在连接到数据库时遇到问题的问题进行了故障排除。数据库可以从shell和phpMyAdmin访问,具有完全相同的凭据,这没有意义。

事实证明,密码中有一个$登录:

$_DB["password"] = "mypas$word";

发送的密码是“mypas”,这显然是错误的。

处理此问题的最佳方法是什么?我用\

$_DB["password"] = "mypas\$word";

它奏效了。

我通常用于字符串,这可能是我之前避免遇到这种情况的方式。$string = 'test'

这是正确的行为吗?如果此密码存储在数据库中并且PHP将其拉出 , 是否会发生同样的问题?我在这里错过了什么...


答案 1
$_DB['password'] = 'mypas$word';

单引号字符串不被处理,而是按“原样”获取。应始终使用单引号字符串,除非特别需要$variable或转义序列(\n、\r 等)替换。它更快,更不容易出错。


答案 2

PHP将变量插入到字符串中,就像用双引号描绘的字符串文字的正常行为一样。由于 可能是未定义的,因此生成的插值字符串为 。$wordmypas$word$wordmypas

解决方案是使用单引号。单引号字符串文本不进行变量插值。


推荐