подчеркивание в переменной php db, вызывающее проблемы - PullRequest
5 голосов
/ 14 октября 2010

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

$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');

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

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

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

Ответы [ 3 ]

0 голосов
/ 14 октября 2010

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

0 голосов
/ 03 июня 2017

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

 ////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);
0 голосов
/ 14 октября 2010

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...