(PHP 5, PHP 7, PHP 8)
mysqli::$thread_id -- mysqli_thread_id — 返回當(dāng)前連接的線程 ID
面向?qū)ο箫L(fēng)格
過程化風(fēng)格
mysqli_thread_id() 函數(shù)返回當(dāng)前連接的線程 ID, 這個(gè)線程 ID 可以在 mysqli_kill() 函數(shù)中使用。 如果 PHP 到數(shù)據(jù)庫(kù)的連接中斷了, 然后使用 mysqli_ping() 函數(shù)重新建立連接的話, 新的連接的線程 ID 會(huì)發(fā)生改變。所以,僅在需要的時(shí)候,調(diào)用本函數(shù)獲取連接的線程 ID。
注意:
線程 ID 是每次連接都重新分配的,也就是說它和連接是緊密相關(guān)的, 如果某個(gè)連接異常斷開了,然后重新建立了到數(shù)據(jù)庫(kù)的連接, 這個(gè)線程 ID 就不再是原來的那個(gè)了,它會(huì)發(fā)生變化。
可以通過執(zhí)行 SQL 語(yǔ)句:
KILL QUERY processid
來殺掉對(duì)應(yīng)連接上正在執(zhí)行的 SQL 語(yǔ)句。
返回當(dāng)前連接的線程 ID
示例 #1 $mysqli->thread_id 例程
面向?qū)ο箫L(fēng)格
<?php
$mysqli = new mysqli("localhost", "my_user", "my_password", "world");
/* 檢查連接是否成功 */
if (mysqli_connect_errno()) {
printf("Connect failed: %s\n", mysqli_connect_error());
exit();
}
/* 獲取連接的線程 ID */
$thread_id = $mysqli->thread_id;
/* 殺掉這個(gè)連接 */
$mysqli->kill($thread_id);
/* 這句代碼應(yīng)該會(huì)報(bào)錯(cuò) */
if (!$mysqli->query("CREATE TABLE myCity LIKE City")) {
printf("Error: %s\n", $mysqli->error);
exit;
}
/* 關(guān)閉連接 */
$mysqli->close();
?>
過程化風(fēng)格
<?php
$link = mysqli_connect("localhost", "my_user", "my_password", "world");
/* 檢查連接是否成功 */
if (mysqli_connect_errno()) {
printf("Connect failed: %s\n", mysqli_connect_error());
exit();
}
/* 獲取連接的線程 ID */
$thread_id = mysqli_thread_id($link);
/* 殺掉這個(gè)連接 */
mysqli_kill($link, $thread_id);
/* 這句代碼應(yīng)該會(huì)報(bào)錯(cuò) */
if (!mysqli_query($link, "CREATE TABLE myCity LIKE City")) {
printf("Error: %s\n", mysqli_error($link));
exit;
}
/* close connection */
mysqli_close($link);
?>
以上例程會(huì)輸出:
Error: MySQL server has gone away