Intereting Posts

подчеркивание в переменной php db, вызывающее проблемы

Я сохраняю всю свою регистрационную информацию для баз данных в файлах за пределами открытого дерева в таких переменных, как

$hostname = '172.0.0.0'; $dbname = 'myname_mydbname'; $username = 'myname_user'; $pw = 'password'; 

Это довольно стандартно.

Проблема в том, что этот конкретный хостинг, с которым я работаю, требует, чтобы myname_ к фронту всех баз данных и имен пользователей. Когда я храню эти строки и передаю их PDO, он отбрасывает все в имени пользователя после myname и сбрасывает строку пароля вместе … Если я помещаю имя пользователя и пароль в функцию как строки вместо переменных, все работает. Я нахожусь на своем пути. может ли кто-нибудь помочь? вот функция, как в коде.

Не работает:

 $this -> DB = new PDO ("mysql:host={$hostname}; dbname={$dbname}", $username, $pw); 

работает:

 $this -> DB = new PDO ("mysql:host={$hostname};dbname={$dbname}", 'myname_user', 'password'); 

Я надеюсь, что кто-то здесь может заставить меня чувствовать себя глупо … спасибо заранее. -Давид

ошибка может помочь …

Не удалось получить дескриптор DB: SQLSTATE [28000] [1045] Доступ запрещен для пользователя «myname» @ «localhost» (с использованием пароля: НЕТ)

Solutions Collecting From Web of "подчеркивание в переменной php db, вызывающее проблемы"

Я не могу найти в документации PDO, что вы можете указать имя пользователя или пароль в строке DSN – это «Имя источника базы данных», а не «Имя источника базы данных и аутентификация». Строка того факта, что вы используете пароль, должна быть намеком на это, и имя пользователя, являющееся «myname», вероятно, связано только с тем, что большинство RDBM используют среду USER USER для соединения, если ни один не указан (что я должен считать установленным как «myname»)

т.е. я считаю, что вам просто нужно использовать дополнительные параметры для передачи учетных данных аутентификации

В процессе работы я создал функции в файле, которые хранятся в информации, которые возвращают строки, и это работает. Супер странно, но он работает.

вы должны получить тот же результат от добавления котировок

  ////the variable $myusr='myname_user'; ////now append quotes $user="'".$myusr."'"; ///which would be the same thing as $psswd= "'pass_word'"; 

функция pdo вычеркнет одинарные кавычки (''), если вы хотите сохранить их с кавычками, это будет «\» пароль в вашем заявлении sql, поскольку сохраненные кавычки должны храниться с разделителями для предотвращения автоматического экранирования.

  INSERT INTO `Auth_USERs` (`id`, `usrname`, `passwd`, `email`, `reg_date`) VALUES (NULL, '\'myname_user\'', '\'pass_word\'', 'someone@somewhere.com', CURRENT_TIMESTAMP); 

вы столкнулись с {}, поскольку это рассматривает переменную как внутри контейнера, поэтому она добавляет «, конечно, массив get делает это тоже (с разными символами, а затем php ускоряет их при загрузке следующей страницы), так как вы выполняете java чтобы сделать ваши функции get, вы по существу добавляете котировки, которые не экранируются. Пока функция PDO не ускользнет от них.

 $this -> DB = new PDO ("mysql:host={$hostname};dbname={$dbname}", $user, $psswd);