Что делать, если пароль с @
in mongodb connect mongodb: // [имя пользователя: пароль @] host1 [: port1] [, host2 [: port2:], …] / db предположим, что username='abc'
и password='abc@123'
а в php мы создаем экземпляр mongo db, например
$m = new Mongo('mongodb://[abc:abc@123@]localhost/abc');
то он дает такую ошибку
Неустранимая ошибка: исключение uncaught «MongoConnectionException» с сообщением «не удалось получить информацию о хосте для 123 @] localhost '
то как решить эту проблему.
Передайте учетные данные с помощью второго аргумента конструктору Mongo
$db = new Mongo('mongodb://localhost', array( 'username' => 'abc', 'password' => 'abc@123', 'db' => 'abc' ));
Использовать метод MongoDB::authenticate()
$m = new Mongo(); $db = $m->abc; $db->authenticate('abc', 'abc@123');
Иметь ввиду…
Существует большой недостаток этого метода: если соединение отбрасывается и затем повторно соединяется, новое соединение не будет аутентифицироваться. Если вы используете формат URI, драйвер PHP автоматически будет аутентифицировать пользователя при каждом новом подключении.
Уступчивое Mongo
прямо сейчас устарело. Совет состоит в том, чтобы использовать MongoClient
вместо тех же аргументов, что и выше. Например
$m = new MongoClient('mongodb://localhost', [ 'username' => 'abc', 'password' => 'abc@123', 'db' => 'abc' ]);
Использование новых Mongo (); может создавать проблемы
«Предупреждение: запуск этого класса приведет к выпуску предупреждения E_DEPRECATED и отключению подтвержденных записей». – php.com
Использовать MongoClient () insted
$m = new MongoClient("mongodb://testUser:testPass@localhost:myportnumber");