MYSQL在codeigniter中多次插入[重复]
Posted
技术标签:
【中文标题】MYSQL在codeigniter中多次插入[重复]【英文标题】:MYSQL multiple insert in codeigniter [duplicate] 【发布时间】:2011-02-16 22:51:02 【问题描述】:我知道通过执行以下操作在 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 中设置一个唯一列并在 codeigniter 中显示 flashdata