2015-04-01 28 views
18

Tình huống này, tôi đang cố sử dụng kết nối PHP để kết nối Cơ sở dữ liệu MySQL của tôi trên phpmyadmin. Không có gì lạ mắt về kết nối chỉ cố gắng để xem liệu kết nối có thành công hay không. Tôi đang sử dụng MAMP để lưu trữ các cơ sở dữ liệu, kết nối Tôi cố gắng để sử dụng là:Kết nối PHP không thành công: SQLSTATE [HY000] [2002] Kết nối từ chối

<?php 
$servername = "127.0.0.1"; 
$username = "root"; 
$password = "root"; 

try { 
    $conn = new PDO("mysql:host=$servername;dbname=AppDatabase", $username, $password); 
    // set the PDO error mode to exception 
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
    echo "Connected successfully"; 
} 
catch(PDOException $e) 
{ 
    echo "Connection failed: " . $e->getMessage(); 
} 
?> 

tôi đã được sử dụng đưa thư để kiểm tra để xem nếu kết nối đang làm việc, nhưng tôi tiếp tục nhận được thông báo lỗi này:

kết nối thất bại: SQLSTATE [HY000] [2002] Kết nối từ chối

Trước khi tôi đã nhận được một thông báo lỗi của:

kết nối thất bại: SQLSTATE [HY000] [2002] Không có tập tin hoặc thư mục

Điều này là do tôi đã đặt tên máy chủ thành localhost, thông qua việc thay đổi địa chỉ IP này thành kết nối bị từ chối và tôi không biết có gì sai.

Bất kỳ trợ giúp nào về vấn đề này sẽ được đánh giá cao, Cảm ơn.

+0

Có vẻ như dịch vụ MySQL của bạn không nghe trên 127.0.0.1 TCP. Nếu nó thực sự chạy ở tất cả, nó có thể là nó là trên một ổ cắm địa phương nhưng không phải TCP. Liệu 'mysql: localhost; dbname = AppDatabase' có tạo sự khác biệt không? –

+0

... hoặc là "không có tệp hoặc thư mục như vậy" xảy ra với 'localhost'? Nếu trường hợp đó xảy ra, hoặc đường dẫn ổ cắm không chính xác trong php.ini, hoặc MySQL không chạy chút nào. –

Trả lời

19

tôi thấy lý do tại sao kết nối bị không làm việc, đó là vì các kết nối đã cố gắng để kết nối với cổng 8888, khi nó cần thiết để kết nối với cổng 8889.

$conn = new PDO("mysql:host=$servername;port=8889;dbname=AppDatabase", $username, $password); 

này cố định được vấn đề, mặc dù thay đổi tên máy chủ thành localhost vẫn cung cấp lỗi.

kết nối thất bại: SQLSTATE [HY000] [2002] Không có tập tin hoặc thư mục

Nhưng nó kết nối thành công khi địa chỉ IP được nhập cho tên máy chủ.

+1

Cố gắng thực hiện một 'ping localhost' để xem nó ping đến địa chỉ loopback hay không. Có thể là tập tin host của bạn bị hỏng. Sử dụng IP trên tên máy chủ sẽ cung cấp một hiệu suất nhỏ tăng anyway – DarkBee

+2

Làm thế nào bạn tìm ra đúng cổng? Không phải theo mặc định cổng máy chủ cục bộ 8080? Điều đó có thay đổi khi bạn sử dụng giao thức TCP không? –

+0

Tôi tin rằng điều này có liên quan đến ipv6. Máy chủ lưu trữ localhost cho tôi phân giải thành ':: 1', vì vậy tôi nghi ngờ máy khách mysql cơ bản không có hỗ trợ ipv6 (ngay cả đối với địa chỉ cục bộ). Thay đổi nó thành 127.0.0.1 đã giải quyết nó cho tôi, giống như dòng cuối cùng của câu trả lời gợi ý. –

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