我正在尝试在PHP应用程序中获取Sqlite DB的最后一个插入行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?
答案 0 :(得分:11)
给定一个带有表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()”。
答案 1 :(得分:1)
PDO :: lastInserId()
答案 2 :(得分:0)
不要使用
SELECT * FROM tablename WHERE id = (SELECT COUNT(*) FROM tablename);
改为使用
SELECT MAX(id) as id FROM tablename LIMIT 1;
或
SELECT id FROM tablename ORDER DESC LIMIT 1;
答案 3 :(得分:-1)
SELECT * FROM [tablename] ORDER BY id DESC LIMIT 1
答案 4 :(得分:-4)
嘿,试试这个查询。但我不知道PHP。
SELECT *
FROM tablename
WHERE id = (SELECT COUNT(*) FROM tablename);