我试图在我的 PHP 应用程序中获取 Sqlite 数据库的最后插入的行 ID。我正在使用 Zend Framework 的 PDO Sqlite 适配器进行数据库处理。 lastInsertId() 方法应该给我结果,但它不会。在 php.net 的 PDO 文档中,我读到 lastInsertId() 在所有数据库上的工作方式可能不同。但它根本不能在 sqlite 上工作吗? 我尝试通过以下方式覆盖适配器的 lastInsertId() 方法:
// Zend_Db_Adapter_Pdo_Sqlite
public function lastInsertId() {
$result = $this->_connection->query('SELECT last_insert_rowid()')->fetch();
return $result[0];
}
但它也不起作用。每次我调用它时只返回 0。有什么特别干净的方法可以找到最后插入的 ID 吗?
最佳答案
给定一个带有表 b
的 SQLite3 数据库,如下所示:
BEGIN TRANSACTION;
CREATE TABLE b(a integer primary key autoincrement, b varchar(1));
COMMIT;
此代码为我提供了一个 lastInsertId
:
public function lastInsertId() {
$result = $this->_connection->query('SELECT last_insert_rowid() as last_insert_rowid')->fetch();
return $result['last_insert_rowid'];
}
也就是说 - 如果您的表定义正确,您唯一的问题可能是您试图获取键 $result[0] - 此外,无论何时您使用计算列,我建议使用正如我在上面演示的那样,“AS”关键字。如果您不想为该列添加别名,则在 SQLite3 中该列应命名为“last_insert_rowid()”。
关于php - 如何使用 Zend_Db 获取 Sqlite 数据库的最后插入 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/506132/