2010-10-13 12 views
5

przechowywać wszystkie moje dane logowania do baz danych w plikach poza drzewem publicznego w zmiennych, takich jakpodkreślenia w zmiennej db php powodując problemy

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

to dość standardowy.

Problem polega na tym, że ten konkretny host, z którym pracuję, wymaga, aby myname_ został dołączony na początku wszystkich baz danych i nazw użytkowników. Kiedy przechowuję te ciągi i przekazuję je do PDO, to porzuca wszystko w nazwie użytkownika po nazwie myname i zrzuca ciąg znaków hasła razem ... Jeśli ustawię nazwę użytkownika i hasło w funkcji jako ciągi zamiast zmiennych, wszystko działa. Jestem na końcu rozumu. Czy ktoś może pomóc? tutaj jest funkcja jak w kodzie.

nie działa:

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

prace:

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

Mam nadzieję, że ktoś tutaj może mi głupio ... dzięki z góry. -David

błąd może pomóc ...

Nie udało się uzyskać DB Rękojeść: SQLSTATE [28000] [1045] Access denied for user 'MyName' @ 'localhost' (using password: NO)

+0

Wypróbuj 'var_dump ($ username);' tuż przed instrukcją 'new PDO'. – zerkms

+0

to interesujące. Otrzymuję NULL NULL. – david

+0

$ hostname = '172.0.0.0 '; $ dbname = 'myname_mydbname'; $ username = 'myname_user'; $ pw = 'hasło'; – david

Odpowiedz

0

Nic nie mogę znaleźć w dokumentacji PDO sugeruje, że można podać nazwę użytkownika i hasło w ciągu DSN - jest to „Baza Źródło Nazwa” nie „Nazwa bazy danych Źródło i Authentication” String fakt używasz nie hasło powinno być podpowiedzią do tego, a nazwa użytkownika "myname" prawdopodobnie tylko dlatego, że większość RDBM korzysta z $ USER Środowisko var połączyć jeśli nie zostanie określony (który muszę założyć, jest ustawiony na „myname”)

znaczy myślę, że po prostu trzeba użyć dodatkowych parametrów do przekazania danych uwierzytelniających

+0

Po prostu zaznaczone - dla * niektórych * backendów (np. PostgreSQL) można określić uwierzytelnianie w DSN, ale nie mysql. – tobyodavies

+0

Wygląda na to, że zmienne są po prostu wyświetlane jako puste w pliku, który je wykorzystuje. Masz rację co do tego, zakładając $ USER z tego powodu. Będę musiał mieć kłopot z wyjaśnieniem, dlaczego zmienne są zerowe, mogę wygenerować echo instrukcji z pliku, w którym są przechowywane, więc wiem, że jest on uwzględniany. – david

+1

oops, błędnie odczytałem twoje pytanie :(czy jest to funkcja, która jest wywoływana, czy masz globalną nazwę użytkownika? To pułapka, w którą wpadłem wiele razy – tobyodavies

0

Jako pracy wokół Zbudowałem uzyskać funkcje w pliku, w którym przechowywane są informacje zwracające ciągi i działa. Super dziwne, ale działa.

+0

$ to -> DB = nowy PDO ("mysql: host =". getHost(). "; dbname =". getDBName(), getUserName(), getPW()); – david

0

należy uzyskać ten sam wynik z załączonych cytaty

////the variable 
$myusr='myname_user'; 

////now append quotes 
    $user="'".$myusr."'"; 

///which would be the same thing as 
    $psswd= "'pass_word'"; 

funkcja pdo obetnie się z apostrofów („”), jeśli chciał przechowywać go z cytatami to być „\” hasła \” "w twoim słowie sql jako przechowywane cytaty muszą być przechowywane z ogranicznikami, aby zapobiec automatycznym ucieczkom.

INSERT INTO `Auth_USERs` (`id`, `usrname`, `passwd`, `email`, `reg_date`) VALUES (NULL, '\'myname_user\'', '\'pass_word\'', '[email protected]', CURRENT_TIMESTAMP); 

ty natknąłem się {} jak to traktuje jako zmienną wewnątrz kontenera, więc dołącza „” oczywiście tablica get robi to zbyt (z różnymi postaciami, potem php uchodzi im na następnej stronie obciążenia) od czasu wykonywania funkcji java w celu uzyskania funkcji get, w zasadzie dołączasz cudzysłowy, które nie są chronione. Dopóki funkcja PDO ich nie wymknie.

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