MYSQL在codeigniter中多次插入[重复]

Posted

技术标签:

【中文标题】MYSQL在codeigniter中多次插入[重复]【英文标题】:MYSQL multiple insert in codeigniter [duplicate] 【发布时间】:2011-02-16 22:51:02 【问题描述】:

可能重复:insert multiple rows via a php array into mysql

我知道通过执行以下操作在 mySQL 中进行多次插入的可能性:

    foreach ($array as $manuf)     
        $sql[] = '("'.mysql_real_escape_string($manuf['name']).'", "'.$manuf['lang'].'", "'.$mId.'")';
    

    $this->db->query('INSERT INTO manufacturers (name, lang ,mid) VALUES ' . implode(',', $sql) );

我想知道是否有更好的方法来做到这一点,或者扩展当前的 DB(活动记录)库以使用更少的代码?

谢谢

【问题讨论】:

见insert multiple rows via a php array into mysql in codeigniter 【参考方案1】:

您需要清楚自己想要在单个语句中插入多行的原因。是为了性能吗?

框架是为了提高编程效率和便利性,但不一定是性能。我同意@Udi Mosayev 给出的答案——以最简单的用法使用框架API。

如果您插入的行数较少,则每条语句插入一行和每条语句插入多行之间的差异是微不足道的。

如果有大量行并且您确实需要它们以高性能插入,那么没有什么比 LOAD DATA INFILE 更好的了。您尝试优化INSERT 的使用是一分钱一分货,一分钱一分货。即使将您的 PHP 数组转储到 tmpfile 然后加载它 LOAD DATA 也比使用 INSERT 更快。

【讨论】:

嗨,比尔。严格来说是性能。我知道 Udi Mosajev 的联系。不过,我无法让它运行多行。做一个加载数据文件似乎很有趣,但绝对是一件需要考虑的事情。我将继续寻找一种方法来在 codeigniter 活动记录样式的框架内进行多次插入或更新... ORM 框架的价值在于开发人员的生产力,而不是运行时性能。 嗨,Bill,我知道这一点,因此我很想扩展 Codeigniter 的数据库库来做到这一点。还要感谢您在 Slideshare 上的“SQL 反模式反击”,这可能是我读过的最好的东西之一! @Bill Karwin,谢谢你的“LOAD DATA INFILE”,我不知道。 @Industrial:谢谢!我很高兴这很有帮助。请务必查看我即将出版的SQL Antipatterns 一书,其中包含更多提示:pragprog.com/titles/bksqla/sql-antipatterns【参考方案2】:

当然。只需使用$this->db->insert('dbTableName', $arrayOfData)。数据数组是字段->值,字段是数据库内表中的列名。

你可以阅读更多关于它here

【讨论】:

【参考方案3】:

如果您要插入非常多的行,您应该在单个查询中完成。我不认为 CI 做得对。 PS:不要忘记mysql最大查询大小。

【讨论】:

嗨 Kirzilla,这不是我在我的示例中所做的,还是我弄错了?谢谢! 是的,你做得对。但是,如果您将使用 CI insert('table', $array) - 我不确定 CI 是否会如您所愿。 CI 可以执行多个插入查询。所以,小心使用 CI 的插入。祝你好运!

以上是关于MYSQL在codeigniter中多次插入[重复]的主要内容,如果未能解决你的问题,请参考以下文章

插入批处理,如果在Codeigniter 3 HMVC中有重复的密钥更新

MySQL 性能:嵌套插入/重复键与多次更新

在 mysql 中设置一个唯一列并在 codeigniter 中显示 flashdata

如何使用 PHP 在 MySQL 中插入 now() 函数 [重复]

使用 Codeigniter 插入忽略

如何使用codeigniter 4框架在mysql数据库中插入多行?