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

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

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

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

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

Каков наилучший способ справиться с этой проблемой? Я избежал $ с помощью \

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

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

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

Это правильное поведение? Что делать, если этот пароль был сохранен в базе данных, и PHP вытащил его – возникла бы эта же проблема? Что мне здесь не хватает …

Related of "Доллар ($) вводит строку пароля, обрабатываемую как переменную"

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

Строки одиночной кавычки не обрабатываются и принимаются «как есть». Вы всегда должны использовать одиночные строки кавычек, если вам не нужны переменные $ или escape-последовательности (\ n, \ r и т. Д.). Это быстрее и меньше подвержено ошибкам.

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

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

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

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

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

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

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

Остальные ответы на все работают до тех пор, пока в паспорте не будут включены одинарные кавычки.

Потерпеть неудачу:

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

Альтернативы:

Если у вас нет других экранированных символов, вы можете избежать $ with \$ , например

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

Или может быть проще избежать одиночной кавычки, например

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

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

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

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

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

Это должно привести:

 one $a 

Я просто столкнулся с этой проблемой и исправил ее до поиска этой темы. Я уверен, что все решения с одинарными кавычками работают идеально. Я решил просто конкатенировать пропуск, который также отлично работает, поскольку я не знал о едином кавычках …. IE

 $db_password = "SamWise" . "$" . "GangiTYloYG";