Geçen Zend_Db kullanarak bir SQLite veritabanı kimliği eklenir nasıl olsun

4 Cevap php

I'm trying to fetch the last inserted row Id of a Sqlite DB in my PHP application. I'm using Zend Framework's PDO Sqlite adapter for database handling. the lastInsertId() method is supposed to give me the results, but it wouldn't. In PDO documentation in php.net I read that the lastInsertId() might not work the same on all databases. but wouldn't it work on sqlite at all? I tried overwriting the lastInsertId() method of the adapter by this:

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

ama o da çalışmıyor. Sadece onu aramak 0 her döndürür. son eklenen kimliği bulmak için herhangi bir özel temiz bir yolu var mı?

4 Cevap

Aşağıdaki gibi bir tablo 'b' ile bir SQLite3 Veritabanı Verilen:

BEGIN TRANSACTION;
CREATE TABLE b(a integer primary key autoincrement, b varchar(1));
COMMIT;

Bu kod bana bir "lastInsertId" verir:

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

O - masa doğru tanımlanmış ise, tek sorunun [0] tuşuna $ sonuç almaya çalıştı olması muhtemeldir - Eğer bir hesaplanan sütun kullanırken her zaman da, ben "AS" kullanarak sütunu aliasing tavsiye Ben yukarıda gösterilen ettik anahtar kelime. Eğer sütun diğer ad istemiyorsanız, SQLite3 sütun ") (LAST_INSERT_ROWID" adlı olmalıdır.

Kullanmayın

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

kullanmak yerine

SELECT MAX(id) as id FROM tablename LIMIT 1;

veya

SELECT id FROM tablename ORDER DESC LIMIT 1;

Hey, bu sorguyu deneyin. Ama PHP hakkında bilmiyorum.

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