php - 如何使用 CodeIgniter 框架从数组中插入多行?

标签 php mysql codeigniter insert bulkinsert

我正在使用插入命令通过 PHP 将一个大型数据集传递到 MySQL 表中,我想知道是否可以通过查询一次插入大约 1000 行,而不是在一英里末尾附加每个值 -长字符串,然后执行它。我正在使用 CodeIgniter 框架,因此我也可以使用它的功能。

最佳答案

在 MySQL 中将一个 INSERT 语句与多行组合起来比每行一个 INSERT 语句要快得多。

也就是说,听起来您可能会在 PHP 中遇到字符串处理问题,这实际上是算法问题,而不是语言问题。基本上,在处理大字符串时,您希望尽量减少不必要的复制。首先,这意味着您要避免串联。构建大字符串(例如一次插入数百行)的最快和最节省内存的方法是利用 implode() 函数和数组分配。

$sql = array(); 
foreach( $data as $row ) {
    $sql[] = '("'.mysql_real_escape_string($row['text']).'", '.$row['category_id'].')';
}
mysql_query('INSERT INTO table (text, category) VALUES '.implode(',', $sql));

这种方法的优点是您无需复制和重新复制到目前为止已与每个连接一起组装的 SQL 语句;相反,PHP 在 implode() 语句中执行此操作一次。这是一个的胜利。

如果你有很多列要放在一起,并且一个或多个很长,你也可以构建一个内部循环来做同样的事情,并使用 implode() 来分配值子句到外部数组。

关于php - 如何使用 CodeIgniter 框架从数组中插入多行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/779986/

相关文章:

php - 从 MySQL 5.1 迁移到 MySQL 5.5 时 PHP 函数会产生任何问题吗?

mysql - 从 mysql 数据库中的元值中删除单词

php - codeigniter 中的 Home Controller 中未调用 user_validation 函数

css - Codeigniter:无法链接引用的 css 文件

php - 我想在没有路径的情况下回显 __FILE__ 名称。我只想命名页面,例如 : index. php

php - 如何使用 PHP 检查/确定 session 年龄

php - laravel 5.4 内部查询中的变量未定义

mysql - 如果项目没有序列号,则设置 sum(count),如果有序列号,则设置 1

mysql - 如果未知,则将 MySQL json 列参数访问为 NULL

sql - 我们可以在一列上添加多个别名吗?