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

Cảnh báo:mysql_query ():3 không phải là tài nguyên MySQL-Link hợp lệ

PHP sử dụng tài nguyên như một biến đặc biệt để giữ các liên kết đến các đối tượng bên ngoài, chẳng hạn như tệp và kết nối cơ sở dữ liệu. Mỗi tài nguyên được cấp một id số nguyên. ( Tài liệu )

Kết nối không thành công

Nếu kết nối cơ sở dữ liệu không thành công, bạn sẽ có thể gặp phải lỗi "Biến được chỉ định không phải là tài nguyên MySQL-Link hợp lệ", như Dan Breen đã đề cập, vì biến được cho là giữ tài nguyên là null.

$link = mysql_connect('localsoth','baduser','badpass'); // failed connection
$result = mysql_query("SELECT 1", $link); // throws error

Vì bạn nhận được một ID tài nguyên cụ thể trong thông báo lỗi, kết nối cơ sở dữ liệu có thể bị đóng đột ngột vì một số lý do. Chương trình của bạn vẫn có một biến có ID tài nguyên, nhưng đối tượng bên ngoài không còn tồn tại. Điều này có thể là do một mysql_close() gọi đến một nơi nào đó trước khi gọi tới mysql_query hoặc lỗi cơ sở dữ liệu bên ngoài đã đóng kết nối.

$link = mysql_connect();
mysql_close($link);
// $link may still contain a resource identifier, but the external object is gone
mysql_query("SELECT 1", $link);

Sử dụng lại các kết nối

Sự cố với tiện ích mở rộng mysql và mysql_connect() là theo mặc định nếu bạn chuyển cùng một tham số trong các cuộc gọi liên tiếp, nó sẽ sử dụng lại kết nối hiện có thay vì tạo kết nối mới ( Tài liệu ). Điều này có thể được khắc phục bằng cách chuyển true tới $new_link tham số.
Bản thân tôi đã gặp phải điều này trên một hệ thống thử nghiệm trong đó dữ liệu từ hai cơ sở dữ liệu riêng biệt trong quá trình sản xuất được kết hợp trên một máy chủ thử nghiệm và trong quá trình thử nghiệm mysql_xxx() các lệnh gọi hàm đi qua nhau và phá vỡ hệ thống.

$link1 = mysql_connect('localhost','user','pass'); // resource id 1 is given
$link2 = mysql_connect('localhost','user','pass'); // resource id 1 is given again
mysql_close($link2); // the connection at resource id 1 is closed
mysql_query("SELECT 1", $link1); // will fail, since the connection was closed

Sử dụng $new_link :

$link1 = mysql_connect('localhost','user','pass'); // resource id 1 is given
$link2 = mysql_connect('localhost','user','pass', true); // resource id 2 is given
mysql_close($link2); // the connection at resource id 2 is closed
mysql_query("SELECT 1", $link1); // the connection at resource id 1 is still open

Chỉnh sửa:
Ngoài ra, tôi khuyên bạn nên sử dụng MySQLi extension hoặc PDO thay vào đó, nếu có thể. Phần mở rộng MySQL đang trở nên khá cũ và không thể tận dụng bất kỳ tính năng nào trong phiên bản MySQL 4.1.3. Hãy xem http://www.php.net/manual/en/mysqli .overview.php để biết một số chi tiết về sự khác biệt giữa ba giao diện.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Nhập từ và xuất sang tệp bằng dòng lệnh MySQL

  2. Cách kết nối với cơ sở dữ liệu bằng ứng dụng khách NaviCat MySQL

  3. cách lấy id chèn cuối cùng sau khi chèn truy vấn trong bản ghi hoạt động codeigniter

  4. Cách lặp qua tập kết quả mysql

  5. UTF-8 xuyên suốt