[typecho]批量插入的做法

前言

最近想起写推特删除的插件,就往下做了点,结果发现,批量插入推文ID的时候,速度很慢,翻了下TYPECHO 关于DB的代码,发现都是自动提交事务的模式。必须得改,涉及到底层的修改(只是返回了两个私有的对象),修改之后,速度提升了不是一点半点,基本上毫秒级就能插入完成,原先要十几秒。

调整

修改home/var/Typecho/Db/Adapter/Pdo.php,增加


 public function getObject(){
        return $this->_object;
    }

修改home/var/Typecho/Db.php,增加

public function getAdapter(){
        return $this->_adapter;
}

使用

因为是pdo,抽象了具体的数据库实现,事务直接启动,最后提交,都是一样的操作,比如下面的代码:

        $sql = "INSERT INTO ".$prefix."tabletable(id_str,stete)  VALUES(?,?)";
        //改了两个文件就为了取到这个
        $stmt = $this->db->getAdapter()->getobject()->prepare($sql);
        $stmt->bindParam(1, $id_str);
        $stmt->bindParam(2, $state);
        //开启事务
        $this->db->getAdapter()->getobject()->beginTransaction();
        for ($x=0;$x<sizeof($ids);$x++) {
            $id_str=$ids[$x];
            $state=$st[$x];
            $stmt->execute();
        }
        //提交事务
        $this->db->getAdapter()->getobject()->commit();

本文作者:小蚊子
本文链接:[typecho]批量插入的做法 - https://djc8.cn/archives/typecho-batch-insert.html
版权声明: 知识共享许可协议本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

标签: typecho, transaction

添加新评论