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

Cảnh báo:mysql_query ():đối số được cung cấp không phải là tài nguyên MySQL-Link hợp lệ

Dựa trên các nhận xét, có vẻ như sự cố là do sử dụng require_once() bên trong một hàm.

Một trong hai điều đang xảy ra. Một trong hai:

  1. Bạn đã bao gồm Connection.php ở một nơi khác, vì vậy khi bạn truy cập hàm, nó thực sự không được bao gồm .. vì một lần một phần của require_once .

    hoặc ...

  2. hoạt động trong lần đầu tiên bạn gọi hàm, nhưng lần thứ hai bạn gọi hàm, tệp đã được đưa vào và không được đưa vào lại.

Vấn đề là khi tệp được đưa vào lần đầu tiên (giả sử đó là từ bên trong hàm này), kết nối $connection biến được tạo trong phạm vi hàm, và giống như bất kỳ biến hàm nào khác, biến mất ở cuối hàm. Khi bạn gọi hàm lần thứ hai, việc bao gồm không xảy ra vì bạn đang sử dụng require_once .

Bạn có thể khắc phục sự cố này bằng cách gọi require() thay vì require_once() , nhưng điều đó sẽ kết nối lại với cơ sở dữ liệu mỗi khi bạn gọi hàm - đó là rất nhiều chi phí không cần thiết. Sẽ gọn gàng hơn nhiều nếu chỉ di chuyển bao gồm bên ngoài hàm và chuyển kết nối vào trong hàm hoặc sử dụng nó như một biến toàn cục.

Nó sẽ trông như thế này:

require_once('Connection.php');

function getResult() {
    global $connection;

    $findQuery = "SELECT * FROM `Keys` WHERE `ID` = '$gID'";
    $findResult = mysql_query($findQuery, $connection) or die(mysql_error());
    $resultRow = mysql_fetch_assoc($findResult) or die(mysql_error());
} 

Tất cả những gì đang được nói, có 2 vấn đề lớn với mã này.

  1. Bạn đang sử dụng mysql_* các hàm không được dùng nữa và sẽ sớm bị xóa khỏi các phiên bản PHP mới. Xem câu hỏi này để biết thêm chi tiết: Tại sao nên Tôi không sử dụng các hàm mysql_ * trong PHP?

    Thực ra không quá khó để chuyển sang một cái gì đó như mysqli_* thay vào đó là các chức năng - có một tập hợp các chức năng không phải đối tượng gần giống với những gì bạn đang sử dụng bây giờ.

  2. Bạn đang bao gồm một biến trong truy vấn của mình mà không thoát khỏi nó đúng cách. Ít nhất thì bạn cũng nên gọi mysql_real_escape_string() (hoặc mysqli_real_escape_string() ), nhưng một giải pháp tốt hơn là xem xét các báo cáo đã chuẩn bị. Bạn có thể tìm thêm thông tin về các báo cáo đã chuẩn bị tại đây: Làm cách nào để ngăn chặn việc đưa SQL vào PHP?




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PHP / PDO chèn ngày hiện tại cộng với một tháng vào MYSQL

  2. PHP &MySQL:Chuyển đổi TIMESTAMP đã lưu trữ thành múi giờ cục bộ của người dùng

  3. Phương pháp tốt nhất để lưu trữ danh sách ID người dùng

  4. Truy vấn MySQL XML

  5. Lỗi nghiêm trọng:Gọi đến hàm không xác định mysql_connect_errno () trong