2012-08-03 21 views
6

Tôi đang cố gắng để kết nối với cơ sở dữ liệu MySQL từ xa sử dụng PDO, nhưng nó thất bại với lỗi:PHP PDO kết nối đến MySQL thất bại, mysql_connect hoạt động tốt

Connection failed: SQLSTATE[28000] [1045] Access denied for user 'my_user'@'some.ip.address' (using password: YES) 

Đây là cách tôi đang cố gắng để kết nối:

$dsn = "mysql:host=sql.my_domain.nazwa.pl;dbname=my_db;port:3307"; 
$user = "my_user"; 
$password = "my_password"; 

try { 
    $this->db = new PDO($dsn, $user, $password); 
} catch (PDOException $e) { 
    echo 'Connection failed: ' . $e->getMessage(); 
} 

và không thành công. Nhưng theo cách này:

mysql_connect('sql.my_domain.nazwa.pl:3307', 'my_user', 'my_password'); 

hoạt động tốt.

Bất cứ ai có bất kỳ ý tưởng nào có thể sai với PDO, cấu hình, thông số tôi đã đặt hoặc có thể là máy chủ cụ thể này (nazwa.pl)?

[SOLVED] Ok, do đó rất đơn giản (nhưng cũng khó khăn để nhận ra ...) lỗi cú pháp, nó phải là một = thay vì : trong port phần của dsn.

Trả lời

5

Hãy thử thay thế:

$dsn = "mysql:host=sql.my_domain.nazwa.pl;dbname=my_db;port:3307"; 

với

$dsn = "mysql:host=sql.my_domain.nazwa.pl;dbname=my_db; port=3307"; 
+0

sự khác biệt là gì? – PeeHaa

+1

@PeeHaa Một định dạng? Tôi đã luôn luôn sử dụng một PDO trên cùng một máy tính như Apache, nhưng các tài liệu mà tôi tìm thấy ngụ ý cú pháp như trên. – Fluffeh

+0

Thật đáng xấu hổ ... Tôi không nhận thấy, rằng sau 'cổng' nên ở lại '=' không ':'. Bây giờ nó hoạt động. Cảm ơn rất nhiều, đó là câu trả lời đúng. – zelazowy

1

Nếu bạn đang cố gắng để kết nối với cơ sở dữ liệu trên một số máy chủ khác Hãy chắc chắn rằng máy chủ SQL của bạn cung cấp cho bạn truy cập vào các cổng đặc biệt là trong trường hợp của bạn 3307 từ địa chỉ IP của những nơi mã của bạn được lưu trữ. Nếu cả hai máy chủ đều thử cùng với localhost hoặc 127.0.0.1

Các vấn đề liên quan