Php Yii插入多条记录并返回ID(插入忽略)

Php Yii插入多条记录并返回ID(插入忽略),php,mysql,yii,Php,Mysql,Yii,在使用多个插入时,我在尝试获取最后插入行的ID时遇到一些问题 我希望在数据库中插入记录,例如使用: $sql ="INSERT IGNORE INTO test(date, src, dst) VALUES ('2014-01-15','1','2') ('2014-01-12','9','2')"; $added = Yii::app()->db->createCommand($sql)->execute(); 这很好,因为我有一个动态数量的记录,我可以形成这个查询,并插

在使用多个插入时,我在尝试获取最后插入行的ID时遇到一些问题

我希望在数据库中插入记录,例如使用:

$sql ="INSERT IGNORE INTO test(date, src, dst) VALUES ('2014-01-15','1','2') ('2014-01-12','9','2')";
$added =  Yii::app()->db->createCommand($sql)->execute();
这很好,因为我有一个动态数量的记录,我可以形成这个查询,并插入所有我正在处理的记录,每次只有1000条。问题是我需要id才能传递到下一个方法

我目前看不到任何获取ID的方法,所有搜索结果对我来说都是空的。因此,我不得不以这种方法为例

foreach($allDataProcessed AS $v)
{
    $model = new Destination;
    $model->date = $v['date'];
    $model->src = $v['src'];
    $model->dst = $v['dst'];
    if($model->ignore->save())
        $ids[] = $model->id;
}
这里的问题显然是我必须与数据库交互的次数。如果我有1000条记录要插入,我们已经从一个数据库调用变成了1000个数据库调用,更不用说进一步方法中的任何调用了

我已经考虑过以后在流程中插入的可能性,但我有许多其他方法和数据库调用等,这些都是以后发生的,如果只是复制记录,我宁愿不做所有的处理,其中许多都是重复的


任何建议都将不胜感激。

我希望我能帮助你

首先要知道的是yii有一个方法来获取最后插入的行

Yii::app()->db->getLastInsertID();
在此之后,我想说,您可能有兴趣使用事务来保证一切按预期工作。。。我留给你一种算法

$transaction = Yii::app()->db->beginTransaction();
// do your things as needed

// things go sweet
$transaction->commit();

// if things get wild...
$transaction->rollback();

您的id是自动递增的吗?@NeerajKumar是的,我的表使用自动递增的id。另一点需要提及的是,表总是递增1。然后,您可以在插入之前获取最后一行id,并且$sql=INSERT IGNORE INTO testdate、src、dst值“2014-01-15”、“1”、“2”、“2014-01-12”、“9”、“2”$添加=Yii::app->db->createCommand$sql->execute;在此之后,再次获得最后一行id,您将获得它之间的所有id。因此只有3个查询只有3个数据库interaction@NeerajKumar假设如果其他进程同时使用相同的方法进行处理,我可能会让一个进程读取最后一个id,然后插入下一个id,而初始id则不存在,因为发生了另一个插入,因此id小于true。我看不出在没有返回id的情况下如何解决这个问题,我甚至无法确保插入的值的数量,因为如果它们重复,它们不会总是被插入。