2009-03-20 51 views
7

Tôi không thể kết nối với mysql bằng tập lệnh php, mặc dù tôi có thể kết nối tốt với phpmyadmin. Tôi đã tạo một người dùng có mật khẩu và cung cấp cho nó các đặc quyền thích hợp cho db, nhưng mỗi khi nó kết nối nó đều chết nói rằng truy cập bị từ chối. Tôi đang sử dụng xampp trên một cửa sổ xp hộp. Tường lửa đều bị vô hiệu hóa và tôi đã kiểm tra mật khẩu nad tên người dùng là chính xác. Đây là mã:không thể kết nối với mysql với php

$conn=mysql_connect('localhost','westbrookc16','megadots') || die (mysql_error()); 

Tên người dùng phải ở định dạng cụ thể hay gì đó?

+0

Bạn đã cấp đặc quyền như thế nào? Vấn đề trong trường hợp này không phải là mã php, nhưng vào cuối mysql. Câu lệnh kết nối là chính xác. –

Trả lời

13

Tôi có linh cảm rằng vấn đề ở đây là máy chủ mà bạn đã cấp cho nó, mặc dù nó thực sự không nhiều hơn dự đoán được giáo dục. Nếu bạn cấp quyền truy cập [email protected]'127.0.0.1 'hoặc địa chỉ IP thực tế của máy chủ, bạn sẽ không được phép kết nối bằng localhost làm máy chủ lưu trữ. Điều này là do thực tế rằng khi "localhost" được chỉ định làm máy chủ, php sẽ giả định rằng bạn muốn sử dụng một ổ cắm unix thay vì các ổ cắm mạng và trong ngữ cảnh đó 127.0.0.1 không giống như localhost.

Từ bài hướng dẫn về mysql_connect():

Lưu ý: Bất cứ khi nào bạn chỉ định "localhost" hoặc "localhost: port" như máy chủ, MySQL thư viện khách hàng sẽ ghi đè này và cố gắng kết nối với một cục bộ ổ cắm (có tên là đường ống trên Windows). Nếu bạn muốn sử dụng TCP/IP, hãy sử dụng "127.0.0.1" thay vì "localhost". Nếu thư viện máy khách MySQL cố gắng kết nối với ổ cắm cục bộ sai , bạn nên đặt đường dẫn chính xác làm Cấu hình thời gian trong cấu hình PHP của mình và để trống trường máy chủ .

Hy vọng điều này không hoàn toàn dư thừa.:)

0

và đưa nó trở thành đặc quyền thích hợp cho các db

như thế nào? Bạn đã sử dụng máy chủ nào cho người dùng khi cấp nó?

Đây là cách nó thường được thực hiện:

GRANT ALL ON mydb.* TO 'someuser'@'somehost' identified by 'password'; 
FLUSH privileges; 

trong trường hợp của bạn 'somehost' có lẽ nên được 'localhost' hoặc '127.0.0.1' (xem bài khác)

Cú pháp tham khảo: http://dev.mysql.com/doc/refman/5.1/en/grant.html

0

Đây sẽ là lỗi đánh máy hoặc bạn không được cấp đặc quyền. Đôi khi nó có thể được báo động khó khăn để phát hiện những.

Tôi khuyên bạn không nên sử dụng phpmyadmin nhưng tải xuống bản sao SQLYOG (phiên bản cộng đồng miễn phí tuyệt vời) và cố gắng đăng nhập với người dùng của bạn thông qua đó. Một khi bạn có vấn đề chẩn đoán có sao chép/dán tên người dùng/mật khẩu trở lại kịch bản của bạn.

Ngẫu nhiên phpmyadmin là tốt, nhưng một chương trình như sqlyog thường thuận tiện hơn, vì vậy đáng để kiểm tra - Tôi chắc chắn bạn sẽ được chuyển đổi. Nếu sqlyog không hoàn toàn phù hợp với sở thích của bạn, có một số lựa chọn thay thế miễn phí và thương mại khác.

5

Tôi đã thấy điều này trước đây, trong đó một người dùng mysql đăng nhập qua php và một người khác thì không. Đôi khi người dùng thậm chí làm việc từ dòng lệnh nhưng không phải từ php.

Luôn là điều Emil đang làm hai. Một người dùng mysql thực sự là cặp người dùng/máy chủ. do đó, người dùng megadots @ localhost và người dùng megadots @ mycoolhost được liệt kê trong bảng mysql.user dưới dạng hai bản ghi riêng biệt.

Nếu bạn có thể đăng nhập từ dòng lệnh chạy truy vấn này.

SELECT user, host FROM mysql.user 

bạn sẽ thấy danh sách đầy đủ người dùng và máy chủ lưu trữ của họ.

nếu bạn nhận ra người dùng phpMyAdmin đang hoạt động, hãy xem cột máy chủ lưu trữ có thể là máy chủ bạn muốn sử dụng.

để thiết lập lại máy chủ chạy các truy vấn này (! Hãy cẩn thận làm điều này làm việc của bạn với bảng privilages cho toàn bộ cài đặt mysql)

update mysql.user set host = 'hostname' 
where user = 'username' and host = 'oldhostname'; 

flush privileges; 

Nếu bạn thấy một kỷ lục với tên người dùng và% như dẫn chương trình mà sẽ có ưu tiên hơn mọi thứ khác, nếu có nhiều bản ghi cho người dùng và% làm máy chủ cho một trong số họ, có thể tên người dùng có% là máy chủ có mật khẩu sai và bất kể bạn đã đặt lại mật khẩu tên người dùng @ localhost bao nhiêu lần nó không hợp lệ vì nó sẽ được so sánh với tên người dùng @% khi đăng nhập.

+0

Đây cũng chính là vấn đề của tôi, chỉ có tên người dùng mới có thể đăng nhập bất kể đặc quyền nào không có mật khẩu - nhưng khi một thẻ được chỉ định, nó sẽ không hoạt động với '%' làm máy chủ. –

2

Nếu bạn đang sử dụng Linux, hãy sử dụng trình quản lý gói synap để tìm và tải xuống tất cả thư viện và bản mod mà PHP và MySQL cần để cả hai có thể kết nối. Vấn đề của tôi là các kịch bản PHP chạy một mình làm việc ở phía máy chủ nhưng khi tôi thử sử dụng các kịch bản PHP để kết nối với MySQL nó sẽ không kết nối, tôi sẽ chỉ thấy một trang trắng trơn. Sau đó, tôi nhận thấy rằng tôi không có các thư viện máy khách MySQL mà PHP sử dụng để kết nối với MySQL. Tôi chỉ có các thư viện máy chủ MySQL. Khi tôi cài đặt các thư viện phía máy khách và khởi động lại máy chủ apache, các kịch bản PHP của tôi không có vấn đề gì khi kết nối. Theo mặc định, PHP 5 không được cài đặt với thư viện phía máy khách MySQL.

+1

Tôi đã cài đặt máy chủ LAMP Ubuntu và gỡ cài đặt mysql-core rồi cài đặt lại. Nó bị mất php5-mysql trên đường đi của họ và một 'sudo apt-get install php5-mysql' đã khiến tôi trên đường trở lại. – user898763452

2

Trong trường hợp của tôi, tôi đã xóa người dùng đã được sử dụng để tạo cơ sở dữ liệu tôi đang sử dụng. Thông thường điều này sẽ cung cấp cho các lỗi 'người sử dụng quy định definer không tồn tại', nhưng đối với một số lý do nó chỉ đơn giản là trả lại truy cập tổng quát hơn bị từ chối để mã PHP của tôi. Tôi không chắc tại sao tôi vẫn có thể đăng nhập thông qua dòng lệnh và các giao diện khác. Để khắc phục sự cố của tôi, tôi đã tạo lại người dùng đã bị xóa.

+0

vấn đề tương tự: phản ứng của chris wininger đã dẫn tôi đến giải pháp của tôi; Tôi đã cài đặt cơ sở dữ liệu đã sao lưu của mình (được sao lưu bởi người dùng 'robert') sang một máy phát triển khác trong tài khoản người dùng 'iohann' ...tên người dùng khác. Vì vậy, tất cả những gì tôi nhận được là 500 Lỗi Máy chủ Nội bộ bí ẩn. Nhưng, với lưu ý của ông Wininger trong tay, khi đăng nhập với tư cách là người dùng 'iohann', tôi đã khôi phục cơ sở dữ liệu trên máy mới, rồi ngay lập tức sao lưu nó, sau đó khôi phục nó. Mọi thứ ồn ào sau. Tôi rất muốn giải thích "tại sao" điều này có hiệu quả. Rõ ràng, một cái gì đó để làm với 'chữ ký người dùng' trên sao lưu/cơ sở dữ liệu. – amalafrida

0

Sau khi gặp sự cố tương tự, tôi thấy rằng thay thế '127.0.0.1' bằng 'localhost' đã thực hiện thủ thuật (mặc dù thực tế tôi có thể kết nối thành công qua thiết bị đầu cuối bằng 'localhost').

0

Tôi gặp vấn đề tương tự, nhưng sau đó tôi phát hiện ra rằng nếu bạn để trong tài khoản mặc định bằng '%' (bất kỳ máy chủ nào), KHÔNG MẬT KHẨU thì bạn không thể kết nối bằng mật khẩu. Tôi không chắc chắn vấn đề là chính xác nhưng loại bỏ chúng giải quyết nó.

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