ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

php – 有没有更好的方法返回多插入的最后插入ID?

2019-06-30 15:01:18  阅读:134  来源: 互联网

标签:php mysql pdo


我正在使用PHP向我的MySQL数据库添加95个新行并返回新的行ID.执行时间大约需要24秒.如果我超过30秒,PHP将停止执行(默认时间限制为30秒).

我需要为插入的每一行返回行ID,以便我可以使用它来安装相关数据.

我目前的解决方案是:

  /* snippets from my class objects to illustrate my code */

  // This foreach takes 24 seconds on just 95 rows
  foreach($list as $row) {
    $id = $this->importRows($sid,$table)

    array_push($id_list,$id);
  }

  /* PDO insertion */
  protected function importRows($row) {
    $sql = "INSERT INTO my_table (name, colour)
            VALUES $row['name'], $row['colour']";

    $result = $this->db->exec($sql);
    return $this->db->lastInsertId();
  }

为了减少插入时间,我希望我可以在一个查询中插入多行
根据MySQL(向下滚动到红色lind和重要一词),它说:

If you insert multiple rows using a single INSERT statement,
LAST_INSERT_ID() returns the value generated for the first inserted
row only.

他们建议的解决方案是创建另一个表并插入新的ID,然后我可以通过最后的select语句获取新的id.

有没有人研究类似的解决方案?关于如何使这个时间更有效的任何建议?

解决方法:

这是我以前在这种情况下使用的技巧:

$query = "INSERT INTO my_table (name, colour) VALUES";
$i = 0;
foreach( $rows as $row ) {
    if( $i ) $query .= ',';
    $query .= " ( $row[ 'name' ],
              IF( @id$i := LAST_INSERT_ID(), $row[ 'colour' ], $row[ 'colour' ] ) )";
    ++$i;
}
$result = $this->db->exec( $query );

然后有这样的查询来获取ID:

SELECT @id1, @id2, @id3, ...

标签:php,mysql,pdo
来源: https://codeday.me/bug/20190630/1337852.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有