php-美元($)登录密码字符串被视为variab

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

原来密码中带有$符号:

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

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

解决此问题的最佳方法是什么? 我用\逃脱了$

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

而且有效。

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

这是正确的行为吗? 如果此密码存储在数据库中并且PHP将其拔出怎么办-会发生同样的问题吗? 我在这里想念什么...

ncatnow asked 2020-08-05T19:55:51Z
8个解决方案
92 votes
$_DB['password'] = 'mypas$word';

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

Thomas Bonini answered 2020-08-05T19:55:58Z
10 votes

PHP将变量$word插入到字符串mypas$word中,这与用双引号描述的字符串文字的正常行为相同。 由于$word可能未定义,因此所得插值字符串为mypas

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

Benji XVI answered 2020-08-05T19:56:23Z
7 votes

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

失败:

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

备择方案:

如果您没有其他转义字符,则可以使用$_DB['password'] = 'my\'pas$word';来转义$,例如

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

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

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

brianlmerritt answered 2020-08-05T19:57:00Z
3 votes

只需将其放在单引号中即可:

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

双引号字符串将插入变量,但单引号字符串则不会。 这样可以解决您的问题。

Ray Hidayat answered 2020-08-05T19:57:24Z
3 votes

用单引号

$_DB["password"] = 'mypas$word';
ghostdog74 answered 2020-08-05T19:57:44Z
2 votes

只需使用单引号'代替“,它就不会尝试将$ word视为变量。

$_DB['password'] = 'mypas$word';
Jeff Beck answered 2020-08-05T19:58:04Z
2 votes

带有双引号的字符串引号将被解释为变量。 单引号字符串按字面意义进行解释。

$a = "one";
$b = "$a";
echo $b . "\n";
$b = '$a';
echo $b . "\n";

这应该产生:

one
$a
Brian Riehman answered 2020-08-05T19:58:29Z
1 votes

我只是遇到了这个问题,并在找到该线程之前对其进行了修复。 我相信所有带单引号的解决方案都可以正常工作。 我选择只是串联通行证,因为我不知道单引号解决方案.... IE,它也可以正常工作

$db_password = "SamWise" . "$" . "GangiTYloYG"; 
blink answered 2020-08-05T19:58:50Z
translate from https://stackoverflow.com:/questions/2557834/dollar-sign-in-password-string-treated-as-variable