Как импортировать экспортированный кодовый файл sqlignater dbutil - PullRequest
0 голосов
/ 12 июня 2018

Я экспортировал базу данных и сохранил файл в папке. Теперь я хочу импортировать тот же файл в базу данных MySQL, используя codeigniter, мой метод экспорта работает правильно, но теперь я хочу импортировать тот же файл.

  function getFeeRelatedTableBackups()
   {
       $this->load->dbutil();
       $this->load->helper('url');
       $this->load->helper('file');
       $this->load->helper('download');
       $this->load->library('zip');
       $prefs = array(
            'tables'        => array('table1', 'table2', 'table3'),   // Array of tables to backup.
          'ignore'        => array(),                     // List of tables to omit from the backup
           'format'        => 'sql',                       // gzip, zip, txt
          'filename'      => 'mybackup.sql',              // File name - NEEDED ONLY WITH ZIP FILES
           'add_drop'      => TRUE,                        // Whether to add DROP TABLE statements to backup file
           'add_insert'    => TRUE,                        // Whether to add INSERT data to backup file
           'newline'       => "\n"                         // Newline    character used in backup file
        );

      $backup=& $this->dbutil->backup($prefs);
      $dbname='backup-on-'.date('Y-m-d-h:i:s').'.sql';
      $save=UPLOAD_PATH_FEE_MANAGEMENT_TABLES.$dbname;
      write_file($save,$backup);
      force_download($dbname,$backup);

     }

пробовал эти два способа восстановления, но оба метода не работают

 function restoredb()
    {
       $isi_file = file_get_contents(UPLOAD_PATH_FEE_MANAGEMENT_TABLES.'backup-on-2018-02-12-07:57:37.sql');
     $string_query = rtrim( $isi_file, "\n;" );
     $array_query = explode(";", $query);
     foreach($array_query as $query)
     {
       $this->db->query($query);
     }
    }
     public function import_database() 
    {
        $temp_line = '';
        $lines = file(UPLOAD_PATH_FEE_MANAGEMENT_TABLES.'backup-on-2018-02-12-07:57:37.sql'); 
       foreach ($lines as $line)
      {
           if (substr($line, 0, 2) == '--' || $line == '')
              continue;
           $temp_line .= $line;
          if (substr(trim($line), -1, 1) == ';')
          {
              $this->db->query($temp_line);
              $temp_line = '';
          }
       }
    }

Ответы [ 2 ]

0 голосов
/ 12 июня 2018

Я не верю, что проблема в комментариях или других проблемах форматирования.Следующее отлично работает для меня при чтении в выводе $this->dbutil->backup().

Основные отличия от ответа Шуката:

  1. Я передаю имя файла (включая полный путь)функция
  2. Я не пытаюсь отфильтровать комментарии или пустые строки
  3. Я использую simple_query() вместо query(), поскольку функции последнего не требуются

Это всегда работало для меня.

public function restoredb($file)
{
    if (file_exists($file))
    {
        $lines = file($file);
        $statement = '';
        foreach ($lines as $line)
        {
            $statement .= $line;
            if (substr(trim($line), -1) === ';')
            {
                $this->db->simple_query($statement);
                $statement = '';
            }
        }
    }
}
0 голосов
/ 12 июня 2018

Попробуйте что-то вроде этого:

public function import_database() {
    $temp_line = '';
    $lines = file('/path/to/file/my_file.sql'); 
    foreach ($lines as $line)
    {
        if (substr($line, 0, 2) == '--' || $line == '' || substr($line, 0, 1) == '#')
            continue;
        $temp_line .= $line;
        if (substr(trim($line), -1, 1) == ';')
        {
            $this->db->query($temp_line);
            $temp_line = '';
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...