【问题标题】:MYSQL multiple insert in codeigniter [duplicate]MYSQL在codeigniter中多次插入[重复]
【发布时间】: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(活动记录)库以使用更少的代码?

谢谢

【问题讨论】:

标签: php mysql database activerecord 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 的插入。祝你好运!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-25
    • 2011-12-31
    • 2010-10-29
    相关资源
    最近更新 更多