我正在使用insert命令通过PHP将一个大型数据集传递到一个MySQL表中,我想知道是否可以通过一个查询一次插入大约1000行,而不是将每个值附加到一个一英里长的字符串的末尾,然后执行它。我使用的是CodeIgniter框架,所以我也可以使用它的功能。
发布于 2012-03-21 20:41:05
CodeIgniter现在支持多个插入/批插入。
$data = array(
array(
'title' => 'My title' ,
'name' => 'My Name' ,
'date' => 'My date'
),
array(
'title' => 'Another title' ,
'name' => 'Another Name' ,
'date' => 'Another date'
)
);
$this->db->insert_batch('mytable', $data);
// Produces: INSERT INTO mytable (title, name, date) VALUES ('My title', 'My name', 'My date'), ('Another title', 'Another name', 'Another date')
发布于 2009-04-23 01:59:31
您可以使用mysqli_stmt类准备插入一行的查询,然后迭代数据数组。类似于:
$stmt = $db->stmt_init();
$stmt->prepare("INSERT INTO mytbl (fld1, fld2, fld3, fld4) VALUES(?, ?, ?, ?)");
foreach($myarray as $row)
{
$stmt->bind_param('idsb', $row['fld1'], $row['fld2'], $row['fld3'], $row['fld4']);
$stmt->execute();
}
$stmt->close();
其中'idsb‘是要绑定的数据类型(int、double、string、blob)。
发布于 2011-03-07 06:05:26
PHP 5中的mysqli是一个对象,它具有一些很好的函数,可以帮助您加快上述答案的插入速度:
$mysqli->autocommit(FALSE);
$mysqli->multi_query($sqlCombined);
$mysqli->autocommit(TRUE);
当插入许多行时关闭自动提交会大大加快插入速度,所以关闭它,然后执行上面提到的,或者只生成一个字符串(sqlCombined),它是由分号分隔的许多insert语句,多查询可以很好地处理它们。
https://stackoverflow.com/questions/779986
复制相似问题