ThinkPHP笔记:仿OneThinkPHP代码实现数据库备份还原失败总结

暂时有三个问题(ThinkPHP版本如下):

OneThink版本:V1.0.131218(ThinkPHP版本:3.2.0)

(仿写项目)ThinkPHP版本:3.2.3

 

OT/Database.class.php中

1.备份部分代码如下:

 

//备份表结构
        if (0 == $start) {
            $result = $db->query("SHOW CREATE TABLE `{$table}`");
            $sql = "\n";
            $sql .= "-- -----------------------------\n";
            $sql .= "-- Table structure for `{$table}`\n";
            $sql .= "-- -----------------------------\n";
            $sql .= "DROP TABLE IF EXISTS `{$table}`;\n";
            $sql .= trim($result[0]['create table']) . ";\n\n";
            if (false === $this->write($sql)) {
                return false;
            }
        }


注意

 

$sql .= trim($result[0]['create table']) . ";\n\n";

这句中的create table要改成全小写

 

2.还原部分代码如下:

 

public function import($start,$file_size)
    {
        //还原数据
        $db = Db::getInstance();

        if ($this->config['compress']) {
            $gz = gzopen($this->file[1], 'r');
            $size = 0;
        } else {
            $size = filesize($this->file[1]);
            $gz = fopen($this->file[1], 'r');
        }

        $sql = '';
        if ($start) {
            $this->config['compress'] ? gzseek($gz, $start) : fseek($gz, $start);
        }

        for ($i = 0; $i < $file_size; $i++) {
            $sql .= $this->config['compress'] ? gzgets($gz) : fgets($gz);
            if (preg_match('/.*;$/', trim($sql))) {
//                dump($sql);
                if (false !== $db->execute($sql)) {
                    $start += strlen($sql);
//                    dump($start);
                } else {
                    return false;
                }
                $sql = '';
            } elseif ($this->config['compress'] ? gzeof($gz) : feof($gz)) {
                return 0;
            }
        }

        return array($start, $size);
    }


注意

public function import($start,$file_size)

for ($i = 0; $i < $file_size; $i++) {

这两句中要加入$file_size(即文件大小),默认只执行1000条语句,所以直接用文件大小控制

if (false !== $db->execute($sql)) {

这句中的execute原来是query,要改成execute

 

后续有时间更新完整demo

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值