Доллар ($) входит в систему, строка пароля рассматривала как переменная

Потраченный на некоторое время, диагностируя проблему, посредством чего веб-приложение PHP/MySQL имело проблемы при соединении с базой данных. К базе данных можно было получить доступ от оболочки и phpMyAdmin с теми же самыми учетными данными, и это не имело смысла.

Оказывается, что пароль имел $, входят в систему он:

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

Отправляемый пароль был "mypas", который является, очевидно, неправильным.

Что лучший способ состоит в том, чтобы решить эту проблему? Я вышел из $ с \

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

и это работало.

Я обычно использую $string = 'test' для строк, который является, вероятно, как я постарался не сталкиваться с этим прежде.

Это корректное поведение? Что, если бы этот пароль был сохранен в базе данных и PHP, вытащило его - эта та же проблема произошла бы? Что я пропускаю здесь...

43
задан Thomas Bonini 1 April 2010 в 09:43
поделиться

6 ответов

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

Строки в одинарных кавычках не обрабатываются и воспринимаются "как есть". Вы всегда должны использовать строки в одинарных кавычках, если только вам не нужна замена $variable или экранирующие последовательности (\n, \r и т.д.). Это быстрее и менее подвержено ошибкам.

94
ответ дан 26 November 2019 в 22:32
поделиться

PHP интерполирует переменную $ word в строку mypas $ word , что является нормальным поведением для строковых литералов, выделенных двойными кавычками. Поскольку $ word предположительно не определено, результирующая интерполированная строка будет mypas .

Решение - использовать одинарные кавычки. Строковые литералы в одинарных кавычках не подвергаются интерполяции переменных.

10
ответ дан 26 November 2019 в 22:32
поделиться

Просто поместите его в строку в одинарных кавычках:

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

Строка в двойных кавычках будет интерполировать переменные, но строки в одинарных кавычках - нет. Так что это решит вашу проблему.

3
ответ дан 26 November 2019 в 22:32
поделиться

Просто используйте одинарные кавычки вместо "и он не будет пытаться рассматривать $ word как переменную.

$_DB['password'] = 'mypas$word';
2
ответ дан 26 November 2019 в 22:32
поделиться

Строковые кавычки с двойными кавычками интерпретируются для переменных. Строки в одинарных кавычках интерпретируются буквально.

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

Это должно быть выход:

one
$a
2
ответ дан 26 November 2019 в 22:32
поделиться

использовать одинарные кавычки

$_DB["password"] = 'mypas$word';
3
ответ дан 26 November 2019 в 22:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: