原创

[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();
温馨提示:
本文最后更新于 2022年03月15日,已超过 114 天没有更新。若文章内的图片失效(无法正常加载),请留言反馈或直接联系我
正文到此结束
本文目录