0

phpMyAdmin 可以成功恢复一个包含 LONGBLOG 数据的 1.6MB 转储文件。我正在尝试复制此功能,但我的功能似乎不起作用。我收到一个分段错误错误,它似乎永远不会执行任何备份文件的代码。(但它确实删除了表)

我相信段错误是在进行 preg_split 时。

这是恢复的例程:(这对没有 LONGBLOB DATA 的小文件非常有效)

function do_restore()
{
    $password=$this->input->post('password');
    if(!$this->Employee->authentication_check($password))
    {
        echo json_encode(array('success'=>false,'message'=>"failure"));
        exit();
    }
    else
    {
        $sq=file_get_contents($_FILES["file"]["tmp_name"]);
        $this->db->trans_start();
        $this->db->query('SET foreign_key_checks = 0');
        $tables = $this->db->list_tables();

        foreach ($tables as $table)
        {           
            $this->db->query('drop table '.$table);
        }

        $this->db->query('SET foreign_key_checks = 1');
        $queries = preg_split("/;+(?=([^'|^\\\']*['|\\\'][^'|^\\\']*['|\\\'])*[^'|^\\\']*[^'|^\\\']$)/", $sq); 
        foreach ($queries as $query) 
        {
            if($query) 
            {
                $this->db->query($query);
            } 
        }

        $this->db->trans_complete();
        echo json_encode(array('success'=>true,'message'=>"success"));
    }
}
4

1 回答 1

0

看起来您需要添加一些代码以确保您拥有有效的文件内容。$sq在调用preg_split.

于 2012-06-22T00:54:35.273 回答