2009-08-29 37 views
10

Có lý do nào để tôi đóng kết nối sau khi truy vấn hoặc ở cuối tập lệnh không?Tại sao sử dụng mysqli_close()?

Lợi ích của việc làm/không làm là gì?

+0

Nếu bạn đang nói về tập lệnh PHP, tôi có thể đề xuất thêm thẻ đó vào câu hỏi của bạn không? –

+0

Dupe: http://stackoverflow.com/questions/880885/close-mysql-connection-important và liên quan: http://stackoverflow.com/questions/336078/php-mysql-when-is-the-best-time -to-disconnect-from-the-database – karim79

Trả lời

20

Kết nối (nếu không liên tục) luôn đóng cửa ở cuối tập lệnh, do đó, về mặt lý thuyết, bạn không cần phải đóng bản thân.

Tuy nhiên, nếu tập lệnh PHP mất nhiều thời gian để thực thi, bạn nên đóng kết nối khi bạn không phải thực hiện bất kỳ yêu cầu nào với cơ sở dữ liệu nữa - ít nhất, nếu tính toán dài sau khi truy vấn.

Điều này đặc biệt đúng nếu ứng dụng của bạn được triển khai trên lưu trữ được chia sẻ: tài khoản người dùng của bạn thường chỉ có thể mở một vài kết nối cùng một lúc. (Số lượng kết nối được mở đồng thời đó có thể khá nhỏ trên lưu trữ được chia sẻ; nó thường lớn hơn trên các máy chủ riêng).


Lý do chúng ta thường không đóng kết nối ourselfves là:

  • chúng tôi thường không thực sự biết khi nào chúng tôi đã thực hiện tất cả các truy vấn của chúng tôi - điều này đặc biệt đúng với các trang được làm bằng rất nhiều "khối" nhỏ; mỗi một trong số đó là độc lập với những người khác và có thể tự mình thực hiện các truy vấn; vì vậy, khi nào chúng ta có thể đóng kết nối?
  • các trang web thường khá nhanh để tạo, vì vậy chúng tôi không thực sự bận tâm về việc đóng kết nối với DB.
+19

Mỗi khi bạn không đóng kết nối, một DBA sẽ giết chết một con mèo con. – Eric

+0

Mỗi khi tôi không đóng kết nối, PHP thực hiện công việc cho tôi: PHP tiết kiệm mèo con! ;; thực sự, những gì tôi nói với trang làm bằng các khối là khá đúng: suy nghĩ về bất kỳ CMS, ví dụ: khi nào biết kết nối nên được đóng lại? Vào cuối của việc thực thi mã PHP (không phải trước đây, vì một số "khối" có thể vẫn cần phải thực hiện một số truy vấn SQL) ;; vì vậy, đóng kết nối bằng tay là khá vô ích ... ;; ngoại trừ, tất nhiên, khi bạn đang tạo ra một cái gì đó mà cần có thời gian và không làm bất kỳ truy vấn DB, như một PDF, hoặc một cái gì đó như thế. –

5

Lợi ích là nếu bạn định thực hiện quá trình xử lý dài nhưng đã truy vấn xong cơ sở dữ liệu thì không có điểm nào đang mở kết nối. Điều tương tự cũng xảy ra khi giữ phiên người dùng mở (chặn các yêu cầu khác).

Ví dụ về điều này có thể đang tạo báo cáo PDF lớn. Điều này có thể đưa bạn 20-30 giây để tạo và ghi tệp nhưng bạn nhận được tất cả dữ liệu bạn cần trong giây đầu tiên.

Thông thường, tuy nhiên bạn cũng có thể thực hiện tự động (giả sử kết nối không liên tục).

+1

Kết nối liên tục là gì? 'mysqli (MYSQL_HOSTNAME, USERNAME, PASSWORD, DATABASE);' là liên tục? – Tahtakafa

+0

Không giống như phần mở rộng mysql, mysqli không cung cấp một chức năng riêng biệt để mở các kết nối liên tục. Để mở kết nối liên tục, bạn phải thêm p: vào tên máy chủ khi kết nối. – Tarik