我正在尝试使用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,有没有办法实现这个目标?感谢。
答案 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();
}