为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

PHP
森林海 2019-11-19 10:20:21
花了一些时间对问题进行故障排除,从而使PHP / MySQL Web应用程序无法连接数据库。可以使用完全相同的凭据从shell和phpMyAdmin访问数据库,这没有任何意义。原来密码中带有$符号:$_DB["password"] = "mypas$word";发送的密码是“ mypas”,这显然是错误的。解决此问题的最佳方法是什么?我用\逃脱了$$_DB["password"] = "mypas\$word";而且有效。我通常使用$string = 'test'字符串,这可能是我以前避免遇到这种情况的方式。这是正确的行为吗?如果此密码存储在数据库中并且PHP将其拔出怎么办-会发生同样的问题吗?我在这里想念什么...
查看完整描述

3 回答

?
子衿沉夜

TA贡献1828条经验 获得超3个赞

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

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



查看完整回答
反对 回复 2019-11-19
?
Cats萌萌

TA贡献1805条经验 获得超9个赞

PHP将变量插值$word到字符串中mypas$word,就像用双引号表示的字符串文字的正常行为一样。由于$word可能是未定义的,因此所得的内插字符串为mypas

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


查看完整回答
反对 回复 2019-11-19
?
德玛西亚99

TA贡献1770条经验 获得超3个赞

其他答案一直有效,直到密码中嵌入单引号为止。

失败:

$_DB['password'] = 'my'pas$word';

备择方案:

如果没有其他转义字符,则可以使用来转义$ \$,例如

$_DB['password'] = "my'pas\$word";

或者,更容易转义单引号,例如

$_DB['password'] = 'my\'pas$word';


查看完整回答
反对 回复 2019-11-19
  • 3 回答
  • 0 关注
  • 447 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信