2017-10-09 7 views
1

J'essaie de trouver un moyen de sauvegarder ma base de données en utilisant Codeigniter "Database Utility" mais sans répéter "INSERT INTO", je veux dire tout fonctionne parfaitement, mais quand nous voyons le fichier sql généré, nous voyons quelque chose comme ceci:Sauvegarde de base de données Codeigniter - Insérer plusieurs lignes sans répéter "INSERT INTO"

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') 

Ce qui est si lent chaque fois que nous importons dans une autre base de données. Je veux obtenir quelque chose comme ceci:

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

en utilisant une seule INSERT INTO, est-il possible d'y parvenir? Merci.

Répondre

0

Vous pouvez utiliser la fonction CodeIgniter insert_batch()

Suivez ce link here pour voir comment cela fonctionne:

0

Créer un tableau multidimensionnel avec le champ et les valeurs comme celui-ci, et utiliser la fonction CodeIgniter inset_batch() pour insérez tout cela dans une seule requête.

$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

Je comprends votre problème, l'utilitaire de base de données est assez lent aussi, en raison de concaténation de chaîne, si passthru() est activé sur votre serveur, mysqldump peut être utilisé, est ici le code de travail, qui exportera la base de données en cours.

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(); 
}