как получить последний вставленный идентификатор базы данных Sqlite, используя Zend_Db - PullRequest
5 голосов
/ 03 февраля 2009

Я пытаюсь получить последний вставленный идентификатор строки Sqlite DB в моем приложении PHP. Я использую адаптер Zend Framework PDO Sqlite для обработки базы данных. метод 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 каждый раз, когда я это называю. Есть ли какой-нибудь специальный способ найти последний вставленный идентификатор?

Ответы [ 5 ]

11 голосов
/ 03 февраля 2009

Для базы данных 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 ()».

1 голос
/ 10 января 2011
0 голосов
/ 02 марта 2012

Не использовать

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;
0 голосов
/ 05 октября 2009
SELECT * FROM [tablename] ORDER BY id DESC LIMIT 1
0 голосов
/ 26 июня 2009

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

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