2013-07-29 177 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 聲明影響這樣一個列。