Потраченный на некоторое время, диагностируя проблему, посредством чего веб-приложение PHP/MySQL имело проблемы при соединении с базой данных. К базе данных можно было получить доступ от оболочки и phpMyAdmin с теми же самыми учетными данными, и это не имело смысла.
Оказывается, что пароль имел $, входят в систему он:
$_DB["password"] = "mypas$word";
Отправляемый пароль был "mypas", который является, очевидно, неправильным.
Что лучший способ состоит в том, чтобы решить эту проблему? Я вышел из $ с \
$_DB["password"] = "mypas\$word";
и это работало.
Я обычно использую $string = 'test'
для строк, который является, вероятно, как я постарался не сталкиваться с этим прежде.
Это корректное поведение? Что, если бы этот пароль был сохранен в базе данных и PHP, вытащило его - эта та же проблема произошла бы? Что я пропускаю здесь...
$_DB['password'] = 'mypas$word';
Строки в одинарных кавычках не обрабатываются и воспринимаются "как есть". Вы всегда должны использовать строки в одинарных кавычках, если только вам не нужна замена $variable или экранирующие последовательности (\n, \r и т.д.). Это быстрее и менее подвержено ошибкам.
PHP интерполирует переменную $ word
в строку mypas $ word
, что является нормальным поведением для строковых литералов, выделенных двойными кавычками. Поскольку $ word
предположительно не определено, результирующая интерполированная строка будет mypas
.
Решение - использовать одинарные кавычки. Строковые литералы в одинарных кавычках не подвергаются интерполяции переменных.
Просто поместите его в строку в одинарных кавычках:
$_DB['password'] = 'mypas$word';
Строка в двойных кавычках будет интерполировать переменные, но строки в одинарных кавычках - нет. Так что это решит вашу проблему.
Просто используйте одинарные кавычки вместо "и он не будет пытаться рассматривать $ word как переменную.
$_DB['password'] = 'mypas$word';
Строковые кавычки с двойными кавычками интерпретируются для переменных. Строки в одинарных кавычках интерпретируются буквально.
$a = "one";
$b = "$a";
echo $b . "\n";
$b = '$a';
echo $b . "\n";
Это должно быть выход:
one
$a
использовать одинарные кавычки
$_DB["password"] = 'mypas$word';