2
我正在使用PHP創建一個進程來監視我們的數據庫,並在數據庫關閉時在我們的網站上放置一個維護頁面。如何使用PHP PDO檢測不可用的數據庫?
我正在使用PDO和Oracle。
我想使用一個數據庫連接並每分鐘查詢一次,提醒人們是否有問題。
06:56:46: SUCCESS -- I take down the database after this success
07:12:48: FAILURE - sent email
07:13:48: FAILURE
...
我想得對電子郵件:但是,如果數據庫出現故障,該腳本搞清楚,有一個問題,所以我的過程,應該檢查每分鐘結束這樣看之前等待15分鐘而不是15分鐘後。有沒有辦法做到這一點,維護一個持久的數據庫連接,或者我每次準備和運行查詢時都必須創建一個新的?
下面的代碼的一大塊,如果它是有幫助的:
$last_email_time = null; // the time of the last error email sent
$db_conn = null;
$script_start_time = time();
while(true) {
$success = false;
// attempt to create a database connection
if(!$db_conn) {
try {
$db_connection_data = $g_pdo_connection_data['freedom'];
$db_conn = new PDO($db_connection_data['string'], $db_connection_data['user'], $db_connection_data['password']);
$db_conn->setAttribute (PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$db_conn->setAttribute (PDO::ATTR_TIMEOUT, 60);
if(!$db_conn) {
throw new Exception("Unable to create a database connection");
}
} catch(Exception $e) {
$last_email_time = handle_error($last_email_time, $e->getMessage());
$db_conn = null;
}
}
// attempt a query
if($db_conn) {
try {
$q = $db_conn->prepare("SELECT 1 FROM DUAL");
$q->execute();
$q->closeCursor();
if(!$q) {
throw new Exception("Unable to query the database");
}
$success = true;
} catch(Exception $e) {
$last_email_time = handle_error($last_email_time, $e->getMessage());
}
}
// remove the maintenance page if we were successful, else clear the connection
if($success) {
handle_success();
$last_email_time = null;
} else {
$db_conn = null;
}
flush();
if(ob_get_contents() != '') {
ob_flush();
}
sleep(60);
}
是的,這就是我所擔心的。 – 2009-08-21 02:06:02