Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Lỗi bị từ chối truy cập khi thực thi mysql_query trong php

Cập nhật cuối cùng:

Tôi đã mở một phiên trò chuyện với Aditii và chúng tôi đã thực hiện một số gỡ lỗi ở đó.

Hóa ra, vấn đề là cô ấy đã nâng cấp từ một máy chủ có các thẻ ngắn được kích hoạt lên một máy không có. Do đó, tất cả mã của cô ấy nằm trong các thẻ ngắn đã không được thực thi và điều này bao gồm tệp cấu hình của cô ấy.

Lỗi trong câu hỏi là do mysql_connect() hàm không được thực thi vì toàn bộ tệp đó không được thực thi. Một mysql_query() Cuộc gọi dựa trên kết nối đó không thành công vì điều này.

Sau khi sửa các thẻ ngắn của cô ấy để sử dụng <?php đầy đủ , tệp đó được thực thi. Như đã thảo luận trong câu trả lời ban đầu của tôi cho câu hỏi này, các dấu ngoặc kép xung quanh các biến được chuyển tới mysql_connect() cuối cùng đã gây ra vấn đề. Sau khi thông báo rằng những dấu ngoặc kép đó được xóa, kết nối đã thành công và sự cố đã được giải quyết.

Toàn bộ phiên gỡ lỗi, cho bất kỳ bên quan tâm nào, có thể được tìm thấy tại đây .

Cập nhật đầu tiên:

Sau khi xem xét vấn đề này kỹ hơn một chút, có hai phần không phù hợp với câu trả lời ban đầu của tôi (tôi đã giữ ở cuối câu trả lời này, vì nó vẫn có một số thông tin tốt trong đó).

Đầu tiên, lỗi đang được kích hoạt bởi mysql_query() không phải mysql_connect() . Điều này có thể là do không có lỗi xử lý xung quanh kết nối, vì vậy lỗi không được nhận thấy cho đến sau này. Thử thêm một số xử lý lỗi xung quanh kết nối:

if (!($con = mysql_connect('$localhost','$username','$password'))) {
  echo mysql_error();
}

if (!mysql_select_db('$dbname',$con)) {
  echo mysql_error();
}

Ở trên, các lỗi sẽ được hiển thị ngay khi lỗi xảy ra.

Điều thứ hai tôi thấy là bạn đang kết nối với localhost với ODBC người sử dụng. Điều này không có ý nghĩa gì nếu lỗi đang được kích hoạt bởi mã kết nối bạn đã hiển thị ở trên. Bạn sẽ đăng nhập bằng người dùng có tên $username nếu vấn đề của bạn là vấn đề trích dẫn đơn lẻ mà tôi giải thích bên dưới, hoặc root nếu bạn không.

Có vẻ như PHP đang cố gắng kết nối với thông tin đăng nhập mặc định cho thiết lập PHP của bạn (tìm thấy trong php.ini của bạn tệp), thay vì thông tin xác thực bạn đã cung cấp. Điều này khiến tôi tin rằng những dòng bạn đang hiển thị cho chúng tôi không thực sự là những dòng đang được thực thi. Bạn có chắc chắn rằng bạn không cố gắng kết nối ở nơi khác trong mã của mình không? Nếu đúng như vậy, tôi nghi ngờ rằng lỗi của bạn nằm ở phần mã đó.

Cũng có thể (tôi phải kiểm tra) điều đó khi bạn đang cố chạy mysql_query() chống lại kết nối null, có thể PHP đang cố gắng tạo kết nối cho bạn. Mặc dù vậy, tôi sẽ không tin tưởng vào điều đó.

Tôi khuyên bạn nên thử chạy mã cập nhật mà tôi đã cung cấp ở trên, mã này sử dụng mysql_error() chức năng hiển thị lỗi khi chúng xảy ra. Bạn thậm chí có thể thêm một số echo của riêng bạn trong các khối đó, để gỡ lỗi printf kiểu cũ tốt.

Câu trả lời ban đầu:

Vấn đề là bạn đang đặt các biến của mình bên trong các dấu ngoặc kép. Nếu bạn đặt chúng trong các dấu ngoặc kép, PHP sẽ không đánh giá biến thành giá trị. Ví dụ:thay vì chuyển root là đối số thứ hai, bạn đang chuyển $username . Cuối cùng, bạn đang cố gắng đăng nhập vào một máy chủ có tên là $localhost với người dùng có tên $username với mật khẩu $password .

Hãy xem trang tài liệu PHP cho Chuỗi . Nó giải thích điều này:

Nếu bạn muốn sử dụng các biến bên trong một chuỗi, bạn cần sử dụng double dấu ngoặc kép, không đơn lẻ. Tuy nhiên, trong trường hợp này, bạn thậm chí không cần đặt các biến này trong dấu ngoặc kép, vì giá trị của chúng đã đã dây. Bạn chỉ có thể chuyển tất cả các biến một mình. Hãy thử điều này:

$con=mysql_connect($localhost, $username, $password);
mysql_select_db($dbname, $con);


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. phủ định mẫu regex trong mysql

  2. Đầu ra PHP trống từ cơ sở dữ liệu MySQL cho một longblob

  3. Vấn đề ủy quyền ban đầu trong mysql

  4. Nhận các ký tự lạ khi tìm nạp giá trị trong cơ sở dữ liệu mysql

  5. MySQL:Sắp xếp theo trường, đặt các ô trống ở cuối