Codeigniter数据库备份 - 插入多行而不重复“INSERT INTO”

时间:2017-10-09 17:13:20

标签: mysql codeigniter database-backups

我正在尝试使用Codeigniter"数据库实用程序"来找到备份数据库的方法。但是没有重复“INSERT INTO”,我的意思是一切都很完美,但是当我们看到生成的sql文件时,我们会看到类似这样的内容:

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 #temp_table (1, 'John', 'Smith, '5/5/1960', 'Gold', 'Active', '002', 'A')
.
.
.
.
so on

只使用一个INSERT INTO,有没有办法实现这个目标?感谢。

3 个答案:

答案 0 :(得分:0)

您可以使用CodeIgniter insert_batch()功能

按照此link here查看其工作原理:

答案 1 :(得分:0)

使用这样的字段和值创建一个多维数组,并使用codeigniter 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);

答案 2 :(得分: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();
}