2024 PHP Conference Japan

mysql_ping

(PHP 4 >= 4.3.0, PHP 5)

mysql_ping測試伺服器連線,如果沒有連線則重新連線

警告

此擴充自 PHP 5.5.0 起已被棄用,並在 PHP 7.0.0 中移除。應使用 MySQLiPDO_MySQL 擴充取代。另請參閱 MySQL:選擇 API 指南。此函式的替代方案包括:

說明

mysql_ping(資源 $link_identifier = NULL): 布林值

檢查與伺服器的連線是否正常運作。如果連線中斷,會嘗試自動重新連線。這個函式可以用於長時間閒置的腳本,以檢查伺服器是否已關閉連線,並在必要時重新連線。

注意事項:

在 MySQL 5.0.3 以上版本中,預設會停用自動重新連線功能。

參數

link_identifier

MySQL 連線。如果未指定連線識別碼,則會採用 mysql_connect() 所開啟的最後一個連線。如果找不到此類連線,它會嘗試建立一個連線,如同以無參數呼叫 mysql_connect() 一樣。如果找不到或無法建立連線,則會產生 E_WARNING 等級的錯誤。

傳回值

如果與 MySQL 伺服器的連線正常運作,則傳回 true,否則傳回 false

範例

範例 #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);
?>

另請參閱

新增註解

使用者貢獻的註解 6 則註解

3
cybot2000 at yahoo dot de
19 年前
應該注意的是,mysql_ping() 似乎會重置伺服器上的錯誤訊息。
我曾用它來檢查在透過 mysql_error() 讀取錯誤訊息前連線是否仍然有效,但它總是回傳空字串。移除連線檢查後,一切就正常了。
3
alext at marketdream dot com dot mx
15 年前
當你遇到這個惱人的錯誤時,mysql_ping() 真的很有幫助

MYSQL 錯誤 2006 伺服器已斷線

給 CI 使用者的資訊
在 CodeIgniter 1.7.2 版本中,有一個函式

$this->db->reconnect()

它使用 mysql_ping() 來重新建立逾時的連線。

這個函式在開發需要數百個資料庫連線的社群媒體網站時特別有用,例如進行插入或選取操作。
3
Doug
14 年前
此函式*不會*嘗試重新連線。它只會告訴你目前*是否*已連線。

要真正重新連線,您必須自行在包裝類別中實作。
2
miro dot dietiker at md-systems dot ch
17 年前
當檢查 $resource 是否有效時…
請注意,只要 $resource 不是正確的 mysql 資源,mysql_ping 就會回傳 NULL。
<?php
$resource
=NULL;
var_dump = @mysql_ping($resource);
# 顯示 NULL
?>
當沒有其他方法可用時,這可以用來判斷目前的 $resource 是 mysql 還是 mysqli 連線…
2
dustin hawkins
18 年前
在 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);
}

//在確認連線有效的情況下執行查詢....

?>
2
vinicius at teracom dot com dot br
20 年前
務必記得,如果第一次連線 MySQL 失敗,`mysql_ping` 永遠會回傳 `true`!因此,若要檢查 MySQL 是否已連線,首先必須檢查 `mysql_connect` 是否沒有回傳 `false`,然後才能開始檢查 `mysql_ping`。
To Top