2011-08-24 46 views
22

Tôi đã xây dựng một trang web cộng đồng xã hội trong CodeIgniter hiện đang nhận được một chút lưu lượng truy cập, công ty lưu trữ đã bắt đầu phàn nàn và nói rằng cơ sở dữ liệu đang nhận kết nối null cũng như kết nối t bị đóng cửa.Kết nối cơ sở dữ liệu CodeIgniter không được đóng

Tôi không hoàn toàn chắc chắn truy vấn trống là gì hoặc cách kết nối sẽ được đưa ra, bất kỳ ý tưởng nào?

Tôi đã thêm mã bổ sung để buộc các kết nối chặt chẽ khi mã kết thúc nhưng dường như điều này không hoạt động.

Có ai có thể đưa ra bất kỳ đề xuất nào về nơi để xem hoặc bắt đầu gỡ lỗi một vấn đề như thế này không?

Cảm ơn

Tôi đã sau ở dưới cùng của lõi của tôi MY_Controller

public function __destruct() { 
    $this->db->close(); 
} 
+4

3 câu trả lời và không phải là một duy nhất một trong số họ thực sự là một câu trả lời cho câu hỏi. –

+0

Hoster của bạn có tham chiếu đến kết nối 'null' không? – hakre

+0

Thật không may tôi không có chi tiết về vấn đề null, từ máy chủ: rất nhiều kết nối từ trang web nơi truy vấn tự nó là “NULL” – ArthurGuy

Trả lời

2

Bạn đã cố gắng làm $this->db->close(); sau một truy vấn được thực hiện?

6

CodeIgniter sẽ tự động đóng kết nối cơ sở dữ liệu nhưng bạn ngầm có thể gọi nó với $this->db->close();

Xem http://codeigniter.com/user_guide/database/connecting.html

+0

Đó không phải là những gì anh ta hỏi. Anh ấy nói anh ấy đã đóng các kết nối ở cuối, nhưng điều đó không hiệu quả, vì vậy anh ấy muốn một số cách để gỡ lỗi vấn đề. –

23

Tôi nghĩ rằng bạn đang gettting problemns với các cấu hình ban đầu từ cơ sở dữ liệu kết nối CodeIgniter.

Tại trang này, bạn có thể thấy mỗi giá trị từ mảng cấu hình:
http://ellislab.com/codeigniter/user-guide/database/configuration.html

$db['default']['hostname'] = "localhost"; 
$db['default']['username'] = "root"; 
$db['default']['password'] = ""; 
$db['default']['database'] = "database_name"; 
$db['default']['dbdriver'] = "mysql"; 
$db['default']['dbprefix'] = ""; 
$db['default']['pconnect'] = TRUE; 
$db['default']['db_debug'] = FALSE; 
$db['default']['cache_on'] = FALSE; 
$db['default']['cachedir'] = ""; 
$db['default']['char_set'] = "utf8"; 
$db['default']['dbcollat'] = "utf8_general_ci"; 
$db['default']['swap_pre'] = ""; 
$db['default']['autoinit'] = TRUE; 
$db['default']['stricton'] = FALSE; 

này nó là một cơ sở dữ liệu cấu hình mảng cơ bản, cố gắng thiết lập các biến của pconnect FALSE, khi nó được bật , hệ thống không đóng bất kỳ kết nối nào và nó vẫn mở ra các truy vấn tin tức bất kỳ lúc nào.

Nếu bạn đặt thành false như tôi đã nói, hệ thống của bạn sẽ tiếp tục hoạt động hoàn hảo, nhưng trình mã sẽ đóng và mở kết nối khi cần sử dụng cơ sở dữ liệu.

Tại đây, bạn có thể tìm và đăng bài trong diễn đàn codeigniter với một chàng trai có vấn đề với biến kết nối, có thể giúp bạn! http://codeigniter.com/forums/viewthread/177573/#842016

+1

Cảm ơn nhận xét nhưng biến pconnect đã được đặt thành false. – ArthurGuy

+0

pconnect = false đang hoạt động .. Cảm ơn bạn .. –

0

Tôi đã gặp vấn đề tương tự trong khi quay lại và giải pháp là đa phần (không có vấn đề đơn lẻ nào xuất hiện cho đến khi tất cả các phần trở nên có vấn đề với nhau). PConnect sẽ được tắt trừ khi bạn biết cách sử dụng nó (như những người khác đã nói).

Một điều cần xem xét là liệu máy chủ web của bạn có được tạo luồng không (chẳng hạn như chế độ công nhân của Apache - các máy chủ web phổ biến nhất). Nếu bạn nhận được nhiều lưu lượng truy cập và chuỗi của bạn không đóng nhanh, bạn có thể gặp phải một số giới hạn kết nối máy chủ web/máy chủ cơ sở dữ liệu đồng thời hoặc làm cạn kiệt tài nguyên bộ nhớ/bộ xử lý. Điều đó có thể khiến một số kết nối cơ sở dữ liệu bị treo.

Vì vậy, tôi muốn kiểm tra các dấu hiệu khác của sự cố và không cho rằng cơ sở dữ liệu là nguồn. Nó có thể rất tốt là một triệu chứng. Bạn có bất kỳ thông tin về các kết nối null (như người dùng cơ sở dữ liệu nào sinh ra chúng)? Điều đó có thể giúp bạn theo dõi nó trở lại ...

Chỉnh sửa: Một điều tôi quên - đôi khi lỗi PHP có thể làm hỏng hoạt động hủy của CI (tự động đóng kết nối, từ sự hiểu biết của tôi), vì vậy bạn cũng có thể kiểm tra nhật ký lỗi của mình.

1

Tôi đã gặp sự cố tương tự với CodeIgniter trong quá khứ và chúng được gây ra bởi các kết nối liên tục trong MySQL được bật theo mặc định trong CodeIgniter. Tôi đã sử dụng truy vấn SHOW PROCESSLIST trong MySQL để xem các kết nối mở, truy vấn hiện tại đang hoạt động của họ, thời gian (tính bằng giây) kết nối đã được mở, v.v. Nếu kết nối không hoạt động, trường Command được trả về sẽ chứa Sleep và trường Info (truy vấn) sẽ là NULL có thể là những gì mà máy chủ của bạn đang đề cập đến. Đó là một nơi tốt để bắt đầu với một vấn đề như thế này.

Một điều khác mà tôi muốn lưu ý là một sắc thái của PHP, mysql_close được gọi là here từ phương thức của bộ điều khiển __destruct sẽ không đóng kết nối MySQL liên tục. PHP sẽ đóng các kết nối không liên tục ở cuối quá trình thực thi của tập lệnh, vì vậy thường không cần thiết phải gọi nó.

Tôi nhận thấy rằng bạn đã nói rằng các kết nối liên tục không được bật, đây là cách tôi xử lý vấn đề của mình có vẻ rất giống với vấn đề của bạn.

0

tôi giải quyết cùng một vấn đề trên một trang web CI bằng cách thay đổi tài xế 'mysql' thành 'mysqli' trong: database.php:

$db['default']['dbdriver'] = "mysqli"; 
Các vấn đề liên quan