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