2014-10-05 32 views
6

Bắt này do lỗi của tôi đăng nhập tất cả bây giờ và sau đó và muốn tìm ra vấn đề:SQLSTATE [HY000] [2002] Connection timed out

[04-Oct-2014 13:25:42 America/Chicago] Failed to connect to database: SQLSTATE[HY000] [2002] Connection timed out [04-Oct-2014 13:25:42 America/Chicago] PHP Fatal error: Call to a member function prepare() on a non-object in /home/spconlin/public_html/spc_app/app/add_log.php on line 28

Connect kịch bản:

<?php 

if(!defined('INCLUDE_CHECK')) die('You are not allowed to execute this file directly'); 

// db config 
$db_host  = '127.0.0.1'; 
$db_database = '*****'; 
$db_user  = '*****'; 
$db_pass  = '*****'; 

//db connection 
try { 
    $db = new PDO("mysql:host=$db_host;dbname=$db_database;charset=utf8", $db_user, $db_pass, 
     array(
      PDO::ATTR_EMULATE_PREPARES => false, 
      PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, //PDO::ERRMODE_SILENT is default setting 
      PDO::ATTR_PERSISTENT => false 
      ) 
    ); 
} 
catch(PDOException $e) { 
    error_log("Failed to connect to database: ".$e->getMessage()); 
} 

?> 

Những gì tôi đã làm:

  • chuyển từ 'lo calhost' để 127.0.0.1 trong kết nối liên tục kết nối
  • chuyển sang giả

Trước khi làm những thay đổi ở trên để kết nối của tôi, tôi đã nhận được SQLSTATE[HY000] [2002] Resource temporarily unavailable hơn connection timed out như trình bày ở trên.

Một số thông tin cơ bản - kịch bản lệnh add_log.php này đặc biệt là thêm thông tin vào cơ sở dữ liệu lên đến vài lần một giây khi nó thực sự đang được sử dụng. Trong khi gần 99% thời gian, tập lệnh cụ thể này được tham chiếu trong lỗi đôi khi các lỗi khác. Tôi nhận ra rằng kịch bản được trỏ đến thực sự không có ý nghĩa gì bởi vì đây không phải là nơi xảy ra lỗi (nó xảy ra trong kết nối không phải là kịch bản lệnh add_log.php), nhưng nó là kỳ quặc. để tin rằng thực tế nó được gọi là quá thường xuyên trong kế vị là một phần của vấn đề.

DB là nội dung.

Đây thực sự là vấn đề với máy chủ và db của tôi hoặc người/máy tính kết nối với nó? Có thể 'họ' có một kết nối xấu với 'tôi' và đây là nguyên nhân gây ra lỗi?

EDIT:

Nó có thể được theo cách mà tôi đang yêu cầu kịch bản kết nối của tôi trên trang nó là cần thiết? Kể từ khi tập tin là 'hit' khá thường xuyên nó cũng sẽ yêu cầu kịch bản kết nối của tôi cũng giống như nhiều bởi dòng dưới đây. Lưu ý rằng tôi đang sử dụng $_SERVER['DOCUMENT_ROOT'] (có thể có ảnh hưởng không?).

require $_SERVER['DOCUMENT_ROOT'].'/custom/functions/connect.php';

+0

Bạn có thể đăng nhập vào db của mình với ứng dụng khách không? không có php? Normaly đây là một vấn đề tài nguyên mysql –

+0

dòng mã nào trong dòng add_log.php 28? Nó dường như không phải là một phần của mã bạn đã đưa vào. – mschuett

+0

Nó không liên quan như đã đề cập trong op. Lỗi xảy ra trong kết nối sau đó nó được kích hoạt vào lần tiếp theo sử dụng $ db.Không có 'lỗi' với các tập lệnh - chúng hoạt động tốt - tôi không thể tự sao chép lỗi này và nó không xảy ra mọi lúc. – user756659

Trả lời

1

Những điều bạn cần cải thiện trong mã của mình là kiểm tra kết nối trước khi tạo mã mới.

Bạn nên quản lý để sử dụng lại kết nối nhiều nhất có thể thay vì tạo lại các kết nối không cần thiết.

Khi có quá nhiều kết nối được mở, bạn sẽ gặp phải các lỗi như thế này và sẽ không rõ ràng để tái tạo.

Ngoài ra khi kết nối không thành công, bạn nên thoát trước khi chuẩn bị.

Thay đổi này có thể yêu cầu bạn triển khai logic đó bên trong một lớp học.

+0

Bạn có thể mở rộng về điều này không? Tôi đang sử dụng pdo. Ban đầu tôi đã kết nối liên tục ... Tôi đã tắt nó đi. Thứ hai, với pdo kết nối được đóng tự động khi kịch bản kết thúc. Vì vậy, các kết nối duy nhất mở là những kết nối cần mở. – user756659

+0

nếu bất kỳ điều gì 'ATTR_PERSISTENT' phải được đặt thành true – meda

+0

Đó là những gì tôi ban đầu có - khi điều này xảy ra, tôi vẫn gặp lỗi tương tự, nhưng chúng là 'SQLSTATE [HY000] [2002] Tài nguyên tạm thời không khả dụng' – user756659

Các vấn đề liên quan