10月18日
网站LOGO 陌子夕生活录
生活,一半家长里短,一半山川湖海...
你我皆是经尘客,何不浊酒忘忧愁。 _𝑴𝒐𝒛𝒊𝒙𝒊.𝒄𝒐𝒎
菜单
  • 热评
    用户的头像
    首次访问
    上次留言
    累计留言
    我的等级
    我的角色
    打赏二维码
    打赏博主
    解决Typecho文章cid和分类mid不连续的问题
    点击复制本页信息
    微信扫一扫
    文章二维码
    文章图片 文章标题
    创建时间
  • 一 言
    确认删除此评论么? 确认
  • 本弹窗介绍内容来自,本网站不对其中内容负责。

    解决Typecho文章cid和分类mid不连续的问题

    陌子夕 · 原创 ·
    Typecho建站 · Typecho
    共 3660 字 · 约 2 分钟 · 480
    温馨提示:
    本文最后更新于2024年07月14日,已经过了95天没有更新,若内容或图片失效,请留言反馈。
    Typecho默认情况下,文章编号(cid)和分类ID(mid)可能会因为删除操作而变得不连续,虽然这不影响网站的正常运行,但对于有强迫证的你来说,这确实是一个问题。过下面的方法我们很容易解决这个问题,该方法适用于PHP7及以上版本的服务器。

    一、解决cid不连续的问题

    将以下代码保存为PHP文件并上传至网站根目录,在地址栏访问,出现OK即可完成。

    php 代码:
    <?php
    /**
     * Typecho重新排列不连续的文章ID
     */
    
    $hostname_blog = "localhost";
    $database_blog = "数据库名";
    $username_blog = "数据库用户名";
    $password_blog = "数据库密码";
    
    // 创建连接  
    $conn = new mysqli($hostname_blog, $username_blog, $password_blog, $database_blog);  
      
    // 检查连接  
    if ($conn->connect_error) {  
        die("连接失败: " . $conn->connect_error);  
    }  
      
    $no = 1;  
      
    function change_id($conn, $cid)  
    {  
        global $no;  
      
        // 修改post cid,并修改分类、标签、自定义字段、评论的对应关系  
        $stmt = $conn->prepare("UPDATE typecho_contents SET cid = ? WHERE cid = ?");  
        $stmt->bind_param("ii", $no, $cid);  
        $stmt->execute();  
      
        if ($stmt->affected_rows == 0) {  
            // 如果没有行被更新,则可能是CID已经不存在或已被更改  
            // 这里可以添加错误处理逻辑  
        }  
      
        $stmt->close();  
      
        // 更新其他依赖表(示例:typecho_relationships)  
        $stmt = $conn->prepare("UPDATE typecho_relationships SET cid = ? WHERE cid = ?");  
        $stmt->bind_param("ii", $no, $cid);  
        $stmt->execute();  
        $stmt->close();  
      
        // 更新其他依赖表(示例:typecho_comments)  
        $stmt = $conn->prepare("UPDATE typecho_comments SET cid = ? WHERE cid = ?");  
        $stmt->bind_param("ii", $no, $cid);  
        $stmt->execute();  
        $stmt->close();  
      
        $no++;  
    }  
      
    // 读取所有CID  
    $query_postRecord = "SELECT cid FROM typecho_contents ORDER BY cid ASC";  
    $result = $conn->query($query_postRecord);  
      
    if ($result) {  
        while ($row = $result->fetch_assoc()) {  
            change_id($conn, $row['cid']);  
        }  
        $result->close();  
      
        // 尝试重置自增ID(注意:这通常不是必要的,因为新插入的行会自动获取下一个ID)  
        // 但如果您确实需要这样做,请确保没有并发插入操作  
        $conn->query("ALTER TABLE typecho_contents AUTO_INCREMENT = " . $no);  
      
        echo 'ok';  
    } else {  
        echo "查询失败: " . $conn->error;  
    }  
      
    // 关闭连接  
    $conn->close();  
    ?>

    二、解决mid不连续的问题

    将以下代码保存为PHP文件并上传至网站根目录,在地址栏访问,出现OK即可完成。

    php 代码:
    <?php  
    /**  
     * Typecho重新排列分类和标签(meta)不连续的mid  
     */  
      
    $hostname_blog = "localhost";  
    $database_blog = "数据库名";
    $username_blog = "数据库用户名";
    $password_blog = "数据库密码";
      
    // 创建连接  
    $conn = new mysqli($hostname_blog, $username_blog, $password_blog, $database_blog);  
      
    // 检查连接  
    if ($conn->connect_error) {  
        die("连接失败: " . $conn->connect_error);  
    }  
      
    $no = 1;  
      
    function change_id($conn, $mid)  
    {  
        global $no;  
      
        // 修改meta id  
        $stmt = $conn->prepare("UPDATE typecho_metas SET mid = ? WHERE mid = ?");  
        $stmt->bind_param("ii", $no, $mid);  
        $stmt->execute();  
      
        // 检查是否有行被更新  
        if ($stmt->affected_rows == 0) {  
            // 这里可以添加错误处理逻辑,比如记录日志  
        }  
      
        // 更新typecho_relationships中的mid  
        $stmt = $conn->prepare("UPDATE typecho_relationships SET mid = ? WHERE mid = ?");  
        $stmt->bind_param("ii", $no, $mid);  
        $stmt->execute();  
      
        // 更新完成后递增$no  
        $no++;  
      
        // 关闭语句  
        $stmt->close();  
    }  
      
    // 读取所有mid  
    $query_postRecord = "SELECT mid FROM typecho_metas ORDER BY mid ASC";  
    $result = $conn->query($query_postRecord);  
      
    if ($result) {  
        while ($row = $result->fetch_assoc()) {  
            change_id($conn, $row['mid']);  
        }  
        $result->close();  
      
        // 尝试重置自增ID(通常不是必要的,但如果你确实需要)  
        // 注意:这可能会在有并发插入的情况下导致问题  
        $conn->query("ALTER TABLE typecho_metas AUTO_INCREMENT = " . $no);  
      
        echo 'ok';  
    } else {  
        echo "查询失败: " . $conn->error;  
    }  
      
    // 关闭连接  
    $conn->close();  
    ?>
    声明:本文由 陌子夕(博主)原创,依据 CC-BY-NC-SA 4.0 许可协议 授权,转载请注明出处。

    还没有人喜爱这篇文章呢

    现在已有

    3

    条评论
    我要发表评论
    1. 头像
      · · 辽宁-沈阳
      • 等级:Lv.2
      • 角色:访客
      • 在线:很久之前
      头像
      沙发

      搜索引擎有收录的可要小心更改永久链接

      评论
      1. · · 湖南
        • 角色:博主
        • 在线:本月
        头像

        这个不影响的,只是修改CID和MID的数字让其连续,对文章的永久链接不做修改

        评论
        1. 头像
          · · 辽宁-沈阳
          • 等级:Lv.2
          • 角色:访客
          • 在线:很久之前
          头像

          是嘛,没有修改永久链接就好

          评论
    博客logo 陌子夕生活录 白茶清欢无别事,我在等风也等你... 苦酒折柳今相离,无月无风也无你... 你我皆是经尘客,何不浊酒忘忧愁。 _𝑴𝒐𝒛𝒊𝒙𝒊.𝒄𝒐𝒎 Umami 统计 BlogFinder
    MOEICP 萌国ICP备20231699号 ICP 湘ICP备2022016241号-2 又拍云 本站由又拍云提供CDN加速/云存储服务 无畏云 本站由无畏云赞助CDN加速服务

    🕛

    本站已运行 4 年 223 天 12 小时 58 分
    陌子夕生活录. © 2020 ~ 2024.
    网站logo

    陌子夕生活录 你我皆是经尘客,何不浊酒忘忧愁。 _𝑴𝒐𝒛𝒊𝒙𝒊.𝒄𝒐𝒎
     
     
     
     
     
     
     
     

    3