2009-02-03 119 views
5

我试图在我的PHP应用程序中获取Sqlite数据库的最后插入的行ID。我正在使用Zend Framework的PDO Sqlite适配器进行数据库处理。 lastInsertId()方法应该给我结果,但它不会。在php.net的PDO文档中,我读到lastInsertId()在所有数据库上的工作可能不一样。但它不会在sqlite上起作用吗? 我试图通过这个覆盖适配器的lastInsertId()方法:如何使用Zend_Db获取Sqlite数据库的最后一个插入的ID

// Zend_Db_Adapter_Pdo_Sqlite 
public function lastInsertId() { 
    $result = $this->_connection->query('SELECT last_insert_rowid()')->fetch(); 
    return $result[0]; 
} 

,但它也不起作用。我每次打电话时都返回0。有什么特别的方法可以找到最后插入的ID吗?

回答

10

给定一个sqlite3的数据库表b,如下所示:

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()”。

+0

它运行良好。即使是Zend_Db_Adapter_Pdo_Sqlite :: lastInsertId()也能工作。我的问题是自动增量的定义。谢谢。 – farzad 2009-02-03 09:32:08

+0

什么,没有信用的答案? ;) – TML 2009-02-03 17:11:38

+0

是的当然。谢谢。 ;) – farzad 2009-02-04 05:38:53

-4

嘿,试试这个查询。但我不知道PHP。

SELECT * 
FROM tablename 
WHERE id = (SELECT COUNT(*) FROM tablename); 
-1
SELECT * FROM [tablename] ORDER BY id DESC LIMIT 1 
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; 
相关问题