как получить последний вставленный идентификатор базы данных Sqlite с использованием Zend_Db

Я пытаюсь извлечь последний вставленный идентификатор строки в Sqlite DB в моем приложении PHP. Я использую адаптер PDO Sqlite от Zend Framework для обработки базы данных. метод lastInsertId () должен дать мне результаты, но это не так. В документации PDO в php.net я читал, что lastInsertId () может не работать одинаково во всех базах данных. но не работает ли он на sqlite? Я попытался переписать метод lastInsertId () адаптера следующим образом:

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

но он тоже не работает. просто возвращает 0 каждый раз, когда я его вызываю. есть ли какой-либо особый чистый способ найти последний вставленный идентификатор?

Учитывая базу данных 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 ()».

Не используй

 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; 
 SELECT * FROM [tablename] ORDER BY id DESC LIMIT 1 

Эй, попробуйте этот запрос. Но я не знаю о PHP.

 SELECT * FROM tablename WHERE id = (SELECT COUNT(*) FROM tablename);