我们使用Symfony2,Propel和mssql服务器触发器。问题如下: *从表单中,我们在DB中插入一个新对象 *然后使用触发器将插入记录到表中 *然后从推进对象我们得到插入的ID =>这是假的。
进一步分析后,使用PHP函数PDO :: lastInsertId获取数据库中最后一个插入的ID,它返回插入日志表中的行的ID。
我认为Propel应该使用SELECT SCOPE_IDENTITY(),这会在触发器进入另一个上下文时返回对象ID。
问题是:如何告诉推动使用此功能?在Propel包中,有一个MssqlPropelPDO类,其实现是:
public function lastInsertId($seqname = null)
{
$result = self::query('SELECT SCOPE_IDENTITY()');
return (int) $result->fetchColumn();
}
但是我的代码中没有使用这个类,而是DebugPDO(我看到了BasePeer类)。
答案 0 :(得分:0)
你最好使用OUTPUT
子句然后用PDO取回它:
<强> 例如 强>
$sql = "INSERT INTO product (product_name) OUTPUT INSERTED.product_id VALUES (?)";
$sth = $dbh->prepare($sql);
$sth->execute(array('widgets'));
$temp = $sth->fetch(PDO::FETCH_ASSOC);
您可以阅读OUTPUT
here。