應該注意的是,mysql_ping() 似乎會重置伺服器上的錯誤訊息。
我曾用它來檢查在透過 mysql_error() 讀取錯誤訊息前連線是否仍然有效,但它總是回傳空字串。移除連線檢查後,一切就正常了。
(PHP 4 >= 4.3.0, PHP 5)
mysql_ping — 測試伺服器連線,如果沒有連線則重新連線
此擴充自 PHP 5.5.0 起已被棄用,並在 PHP 7.0.0 中移除。應使用 MySQLi 或 PDO_MySQL 擴充取代。另請參閱 MySQL:選擇 API 指南。此函式的替代方案包括:
檢查與伺服器的連線是否正常運作。如果連線中斷,會嘗試自動重新連線。這個函式可以用於長時間閒置的腳本,以檢查伺服器是否已關閉連線,並在必要時重新連線。
注意事項:
在 MySQL 5.0.3 以上版本中,預設會停用自動重新連線功能。
link_identifier
MySQL 連線。如果未指定連線識別碼,則會採用 mysql_connect() 所開啟的最後一個連線。如果找不到此類連線,它會嘗試建立一個連線,如同以無參數呼叫 mysql_connect() 一樣。如果找不到或無法建立連線,則會產生 E_WARNING
等級的錯誤。
範例 #1 mysql_ping() 範例
<?php
set_time_limit(0);
$conn = mysql_connect('localhost', 'mysqluser', 'mypass');
$db = mysql_select_db('mydb');
/* 假設這個查詢會花費很長時間 */
$result = mysql_query($sql);
if (!$result) {
echo '查詢 #1 失敗,正在退出。';
exit;
}
/* 確保連線仍然有效,如果無效,則嘗試重新連線 */
if (!mysql_ping($conn)) {
echo '連線中斷,在查詢 #1 後退出。';
exit;
}
mysql_free_result($result);
/* 所以連線仍然有效,讓我們執行另一個查詢 */
$result2 = mysql_query($sql2);
?>
應該注意的是,mysql_ping() 似乎會重置伺服器上的錯誤訊息。
我曾用它來檢查在透過 mysql_error() 讀取錯誤訊息前連線是否仍然有效,但它總是回傳空字串。移除連線檢查後,一切就正常了。
當你遇到這個惱人的錯誤時,mysql_ping() 真的很有幫助
MYSQL 錯誤 2006 伺服器已斷線
給 CI 使用者的資訊
在 CodeIgniter 1.7.2 版本中,有一個函式
$this->db->reconnect()
它使用 mysql_ping() 來重新建立逾時的連線。
這個函式在開發需要數百個資料庫連線的社群媒體網站時特別有用,例如進行插入或選取操作。
當檢查 $resource 是否有效時…
請注意,只要 $resource 不是正確的 mysql 資源,mysql_ping 就會回傳 NULL。
<?php
$resource =NULL;
var_dump = @mysql_ping($resource);
# 顯示 NULL
?>
當沒有其他方法可用時,這可以用來判斷目前的 $resource 是 mysql 還是 mysqli 連線…
在 php 5.1.2 和 mysql 5.0 下使用 mysql_ping 命令時,我遇到了自動重新連線「功能」的問題,主要是當連線斷開時,mysql_ping 不會自動重新建立與資料庫的連線。
當沒有查詢的時間超過 my.cnf 中的 wait_timeout 值時,與資料庫的連線就會斷開。您可以透過執行查詢 "SHOW VARIABLES;" 來檢查您的 wait_timeout 值。
如果您在連線斷開時無法自動重新連線,請使用以下程式碼
<?php
$conn = mysql_connect('localhost','user','pass');
mysql_select_db('db',$conn);
if (!mysql_ping ($conn)) {
//這裡是主要的技巧,您必須關閉連線(即使它目前無法運作)才能正確地重新建立它。
mysql_close($conn);
$conn = mysql_connect('localhost','user','pass');
mysql_select_db('db',$conn);
}
//在確認連線有效的情況下執行查詢....
?>
務必記得,如果第一次連線 MySQL 失敗,`mysql_ping` 永遠會回傳 `true`!因此,若要檢查 MySQL 是否已連線,首先必須檢查 `mysql_connect` 是否沒有回傳 `false`,然後才能開始檢查 `mysql_ping`。