Я пытаюсь извлечь последний вставленный идентификатор строки в 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 ()».
PDO :: lastInserId ()
Не используй
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);