5

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

4

5 回答 5

11

给定一个带有 table 的 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()”。

于 2009-02-03T07:52:43.417 回答
1

PDO::lastInserId()

见:http ://us2.php.net/manual/en/pdo.lastinsertid.php

于 2011-01-10T19:34:25.280 回答
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;
于 2012-03-02T12:45:34.253 回答
-1
SELECT * FROM [tablename] ORDER BY id DESC LIMIT 1
于 2009-10-04T20:06:31.570 回答
-4

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

SELECT *
FROM tablename
WHERE id = (SELECT COUNT(*) FROM tablename);
于 2009-06-26T11:34:24.583 回答