2017-10-09 106 views
1

我試圖找到一種方法來使用Codeigniter「數據庫實用程序」備份我的數據庫,但不重複「INSERT INTO」,我的意思是一切正常,但當我們看到生成的SQL文件,我們看到這樣的內容:Codeigniter數據庫備份 - 插入多行而不重複「插入」

INSERT INTO Membership (ID, FirstName, LastName, DOB) 
VALUES (1, 'John', 'Smith', '5/5/1960') 

INSERT INTO Membership (ID, FirstName, LastName, DOB) 
VALUES (2, 'Hello", 'World", '4/9/1975') 

INSERT INTO Account(ID, Type, Effective_Date, Status) 
VALUES (1, 'Gold', GetDate(), 'Active') 

INSERT INTO Account(ID, Type, Effective_Date, Status) 
VALUES (2, 'Platinum', GetDate(), 'Inactive') 

INSERT INTO Participant(ID, Code, Type) 
VALUES (1, 002, 'A') 

INSERT INTO Participant(ID, Code, Type) 
VALUES (2, 002, 'A') 

的是如此之慢,每當我們在另一個數據庫中導入。我想是這樣的:只使用一個INSERT INTO

INSERT INTO #temp_table (1, 'John', 'Smith, '5/5/1960', 'Gold', 'Active', '002', 'A') 
. 
. 
. 
. 
so on 

,有沒有什麼辦法來實現這一目標?謝謝。

回答

0

你可以利用笨insert_batch()功能

按照此link here來看看它是如何工作的:

0

創建領域,這樣值的多維數組,並使用笨inset_batch()函數將所有這些插入到單個查詢中。

$data = array(
    array(
      'ID' => 1, 
      'FirstName' => 'John', 
      'LastName' => 'Doe', 
      'DOB'  => '5/5/1960' 
    ), 
    array(
      'ID' => 2, 
      'FirstName' => 'John', 
      'LastName' => 'Smith', 
      'DOB'  => '5/5/1960' 
    ) 
); 

$this->db->insert_batch('temp_table', $data); 
0

我明白你的問題,數據庫實用程序是相當緩慢此外,由於字符串連接,如果passthru()是您的服務器上啓用,然後mysqldump可以使用,在這裏工作的代碼,這將導出當前的數據庫。

public function backup_current_db() 
{ 
    $db_user=$this->db->username; 
    $password=$this->db->password; 
    $db=$this->db->database; 

    $filename = $db . "-" . date("Y-m-d_H-i-s") . ".sql"; 
    $mime = "application/octet-stream"; 

    header("Content-Type: " . $mime); 
    header('Content-Disposition: attachment; filename="' . $filename . '"'); 

    $cmd = "mysqldump -u '$db_user' --password='$password' --no-create-info --complete-insert '$db' "; 
    passthru($cmd); 

    die(); 
}