2010-10-13 32 views
5

tôi lưu trữ tất cả các thông tin đăng nhập của tôi cho cơ sở dữ liệu trong các tập tin bên ngoài của cây nào trong các biến nhưnhấn trong biến db php gây ra vấn đề

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

Đó là khá chuẩn.

Vấn đề là lưu trữ cụ thể mà tôi đang làm việc với yêu cầu myname_ phải được nối vào mặt trước của tất cả các cơ sở dữ liệu và tên người dùng. Khi tôi lưu trữ các chuỗi này và chuyển chúng vào PDO, nó sẽ xóa tất cả mọi thứ trong tên người dùng sau tên của tôi, và bỏ tất cả chuỗi mật khẩu lại với nhau ... Nếu tôi đặt tên người dùng và mật khẩu vào chức năng dưới dạng chuỗi thay vì biến mọi thứ hoạt động. Tôi ở cuối wits của tôi. có ai giúp được không? đây là hàm như trong mã.

Không làm việc:

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

công trình:

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

tôi hy vọng một ai đó ở đây có thể làm cho tôi cảm thấy ngu ngốc ... cảm ơn trước. -David

các lỗi có thể giúp ...

Không thể có được DB xử lý: SQLSTATE [28000] [1045] Truy cập bị từ chối cho người dùng myname '@ 'localhost'(sử dụng mật khẩu: NO)

+0

Thử 'var_dump ($ username);' ngay trước câu lệnh 'new PDO'. – zerkms

+0

thats thú vị. Tôi nhận được NULL NULL. – david

+0

$ hostname = '172.0.0.0 '; $ dbname = 'myname_mydbname'; $ username = 'myname_user'; $ pw = 'mật khẩu'; – david

Trả lời

0

Không có gì tôi có thể tìm thấy trong tài liệu PDO cho biết bạn có thể chỉ định tên người dùng hoặc mật khẩu trong chuỗi DSN - đó là "Tên nguồn cơ sở dữ liệu" chứ không phải "Tên nguồn cơ sở dữ liệu và xác thực". mật khẩu phải là một gợi ý cho điều này, và tên người dùng là 'myname' có lẽ chỉ vì hầu hết RDBM sử dụng $ USER var môi trường để kết nối nếu không chỉ định (mà tôi phải giả định được đặt là 'myname')

tức là tôi nghĩ rằng bạn chỉ cần phải sử dụng các thông số phụ để vượt qua các thông tin xác thực

+0

Chỉ cần kiểm tra - cho * một số backends (ví dụ: postgreSQL) bạn có thể xác định xác thực trong DSN, nhưng không mysql. – tobyodavies

+0

Vâng, có vẻ như các biến thực sự chỉ hiển thị là null trong tệp sử dụng chúng. Bạn có quyền về nó giả sử $ USER vì nó mặc dù. Tôi sẽ phải gặp rắc rối khi chụp tại sao các biến là null, tôi có thể lặp lại một câu lệnh từ tệp mà chúng được lưu trữ, vì vậy tôi biết nó đang được đưa vào. – david

+1

oops, tôi hiểu sai câu hỏi của bạn khá một chút :(là nó bên trong một chức năng mà điều này đang được gọi, bạn có toàn cầu $ tên người dùng? Thats một cái bẫy tôi đã rơi vào nhiều lần – tobyodavies

0

Là một công trình xung quanh tôi đã xây dựng nhận các hàm trong tệp mà thông tin được lưu trữ trả về các chuỗi và nó hoạt động. Siêu lạ, nhưng nó hoạt động.

+0

$ này -> DB = new PDO ("mysql: host =". getHost(). "; dbname =". getDBName(), getUserName(), getPW()); – david

0

bạn sẽ nhận được kết quả tương tự từ dấu ngoặc kép phụ

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

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

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

chức năng PDO sẽ loại bỏ các dấu nháy đơn ('') nếu bạn muốn lưu trữ nó với dấu ngoặc kép nó sẽ là '\' mật khẩu \' 'trong câu lệnh sql của bạn vì dấu ngoặc kép được lưu trữ phải được lưu trữ với dấu phân cách để ngăn tự động thoát.

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

bạn đã xem qua các {} như thế này xử lý các biến như bên trong một container, vì vậy nó gắn thêm '' tất nhiên mảng get thực hiện điều này quá (với các nhân vật khác nhau, sau đó php thoát chúng trên tải trang tiếp theo) kể từ khi bạn đang thực hiện một hàm java để làm cho các hàm get của bạn, về cơ bản bạn đang thêm các dấu ngoặc kép không được thoát. Cho đến khi chức năng PDO thoát khỏi chúng.

$this -> DB = new PDO ("mysql:host={$hostname};dbname={$dbname}", $user, $psswd); 
Các vấn đề liên quan