2009-02-03 42 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; 
相關問題