Подтвердить что ты не робот

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

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

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

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

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

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

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

и он работал.

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

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

4b9b3361

Ответ 1

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

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

Ответ 2

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

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

Ответ 3

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

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

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

Ответ 4

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

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

Ответ 5

Другой ответит, что все работает до тех пор, пока в паспорте не будут введены одинарные кавычки.

Сбой:

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

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

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

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

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

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

Ответ 6

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

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

Ответ 7

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

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

Это должно дать:

one
$a

Ответ 8

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

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