• 首页
  • vue
  • TypeScript
  • JavaScript
  • scss
  • css3
  • html5
  • php
  • MySQL
  • redis
  • jQuery
  • mysqli::$thread_id()

    (PHP 5, PHP 7)

    返回当前连接的线程 ID

    说明

    面向对象风格
    int $mysqli->thread_id;
    过程化风格
    mysqli_thread_id(mysqli$link): int

    mysqli_thread_id()函数返回当前连接的线程 ID,这个线程 ID 可以在mysqli_kill()函数中使用。如果 PHP 到数据库的连接中断了,然后使用mysqli_ping()函数重新建立连接的话,新的连接的线程 ID 会发生改变。所以,仅在需要的时候,调用本函数获取连接的线程 ID。

    Note:

    线程 ID 是每次连接都重新分配的,也就是说它和连接是紧密相关的,如果某个连接异常断开了,然后重新建立了到数据库的连接,这个线程 ID 就不再是原来的那个了,它会发生变化。

    可以通过执行 SQL 语句:KILL QUERY processid来杀掉对应连接上正在执行的 SQL 语句。

    参数

    $link

    仅以过程化样式:由mysqli_connect()或mysqli_init()返回的链接标识。

    返回值

    返回当前连接的线程 ID

    范例

    Example #1$mysqli->thread_id例程

    面向对象风格

    <?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;
    /* 杀掉这个连接 */
    $mysqli->kill($thread_id);
    /* 这句代码应该会报错 */
    if (!$mysqli->query("CREATE TABLE myCity LIKE City")) {
        printf("Error: %s\n", $mysqli->error);
        exit;
    }
    /* 关闭连接 */
    $mysqli->close();
    ?>
    

    过程化风格

    <?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);
    /* 杀掉这个连接 */
    mysqli_kill($link, $thread_id);
    /* 这句代码应该会报错 */
    if (!mysqli_query($link, "CREATE TABLE myCity LIKE City")) {
        printf("Error: %s\n", mysqli_error($link));
        exit;
    }
    /* close connection */
    mysqli_close($link);
    ?>
    

    以上例程会输出:

    Error: MySQL server has gone away
    

    参见

    • mysqli_kill() 让服务器杀掉一个 MySQL 线程