2013-07-29 79 views
1

我使用Doctrine/DBAL很长时间,但使用executeUpdate和获取最后一个插入标识时遇到了一些问题。 它始终返回0,但数据库条目已设置。 coloumn id被设置,它是我的数据库中的AutoIncrement和PRIMARY。Doctrine/DBAL lastInsertId()返回0

这是将我的条目复制到另一个表格的功能。

$copy = $app['db']->executeUpdate('INSERT INTO `pd_user_model` (
       `campaign_id`, 
       ... 
       `created`) 
      SELECT `campaign_id`, 
       ...     
       NOW() 
      FROM `pd_pass_model` WHERE `campaign_id` = ?', array($campaignID)); 

echo "INSERT<br>"; 
echo "LAST INSERT:" . $app['db']->lastInsertId(); 


//RETURN VALUE 
INSERT 
LAST INSERT:0 

有人对我有任何提示。 到目前为止感谢!

+4

这是因为您在INSERT语句后执行SELECT操作。 尝试只插入查询,然后检查lastInsertId()的值 – gunnx

回答

3

lastInsertId返回最后的生成的 id。在你的用例中,你没有生成一个id。您已经为查询提供了一个id,因此lastInsertId函数将返回0,因为它没有生成ID。

MYSQL doc

LAST_INSERT_ID()(无参数)返回一个BIGINT(64位)的值表示,是由最近执行的用于 AUTO_INCREMENT列设置的第一自动生成的值 INSERT 声明影响这样一个列。