【发布时间】:2011-10-17 07:50:07
【问题描述】:
我正在使用 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(向下滚动到红色的林德和重要的词)它说:
如果您使用单个 INSERT 语句插入多行, LAST_INSERT_ID() 返回为第一个插入生成的值 仅行。
他们建议的解决方案是创建另一个表并在其中插入新 ID,然后我可以在最后通过 select 语句获取新 ID。
有人研究过类似的解决方案吗?有什么建议可以让我更有效地完成这项工作吗?
【问题讨论】:
-
有一个使用php内置方法获取最后插入idphp.net/manual/en/function.mysql-insert-id.php的例子
-
@Sumair Zafar,这就是
$this->db->lastInsertId()使用 PDO 的原因。