Доллар ($) вводит строку пароля, обрабатываемую как переменную
Потрачено некоторое время на устранение неполадки, при которой у веб-приложения PHP/MySQL возникли проблемы с подключением к базе данных. Доступ к базе данных можно получить из оболочки и phpMyAdmin с теми же учетными данными, и это не имело смысла.
Оказывается, пароль имеет знак $:
$_DB["password"] = "mypas$word";
Отправляемый пароль был "mypas", который явно ошибочен.
Какой лучший способ справиться с этой проблемой? Я избежал $с помощью \
$_DB["password"] = "mypas\$word";
и он работал.
Обычно я использую $string = 'test'
для строк, которые, вероятно, я избегаю использовать в этом раньше.
Это правильное поведение? Что делать, если этот пароль был сохранен в базе данных, а PHP вытащил его - возникла бы такая же проблема? Что мне здесь не хватает...
Ответы
Ответ 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";