Codeigniter数据库备份 - 插入多行而不重复“插入”
问题描述:
我试图找到一种方法来使用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
,有没有什么办法来实现这一目标?谢谢。
答
创建领域,这样值的多维数组,并使用笨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);
答
我明白你的问题,数据库实用程序是相当缓慢此外,由于字符串连接,如果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();
}