5

如何使用多行插入获取最后插入的 ID?这是我的代码:

$sql='INSERT INTO t (col1, col2, col3) VALUES (1, 2, 3), (4, 5, 6), (7, 8, 9)'; // example
$stmt = $contactsTable->getAdapter()->prepare($sql);
$stmt->execute(); 
$rowsAdded=$stmt->rowCount(); // mysql_affected_rows
$lastId=$stmt->lastInsertId();
echo '<br>Last ID: '.$lastId;

此外,ZF 中是否有一种方法可以在插入之前获取下一个插入 id?

谢谢

4

4 回答 4

10
$lastId=$contactsTable->getAdapter()->lastInsertId();

这行得通。

于 2010-01-25T14:12:00.010 回答
3

所以,这是我用来创建多行插入的完整工作代码,获取添加的行和最后插入的 id:

$contactsTable = new Contacts_Model_Contacts();
$sql='INSERT INTO t (col1, col2, col3) VALUES (1, 2, 3), (4, 5, 6), (7, 8, 9)'; // example
$stmt = $contactsTable->getAdapter()->prepare($sql);
$stmt->execute(); 
$rowsAdded=$stmt->rowCount(); // mysql_affected_rows
$lastId=$contactsTable->getAdapter()->lastInsertId(); // last inserted id
echo '<br>Last ID: '.$lastId;
于 2010-01-19T15:05:50.920 回答
2

另一种解决方案。从控制器中移出 sql 代码并将它们放置在模型中。这就是他们的目的。

如果您使用模型,您可以在类变量中给出具有自动增量列的表的名称。

protected $_name="<table_name>"; 

然后在您的模型类方法中,您可以从

$insertID= $this->getAdapter()->lastInsertId();
于 2012-06-05T06:04:10.210 回答
0

该代码应该可以工作,但它只会让您获得最后插入的 id。

您可以使用此 mysql 查询获得下一个自动增量:

SELECT Auto_increment FROM information_schema.tables WHERE TABLE_SCHEMA = 'your_db_name' AND TABLE_NAME='the_table_you_want';
于 2010-01-19T14:49:12.283 回答