如何使用Zend_Db获取Sqlite数据库的最后一个插入ID

时间:2009-02-03 05:51:55

标签: php sqlite zend-db

我正在尝试在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?

5 个答案:

答案 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()

请参阅:http://us2.php.net/manual/en/pdo.lastinsertid.php

答案 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);