代码之家  ›  专栏  ›  技术社区  ›  farzad

如何使用Zend_Db获取Sqlite数据库最后插入的Id

  •  5
  • farzad  · 技术社区  · 17 年前

    我试图在PHP应用程序中获取Sqlite DB最后插入的行Id。我正在使用Zend Framework的PDO Sqlite适配器进行数据库处理。lastInsertId()方法应该会给出结果,但它不会。在php.net中的PDO文档中,我了解到lastInsertId()在所有数据库上的工作方式可能不同。但是,它在sqlite上根本不起作用吗? 我尝试通过以下方式覆盖适配器的lastInsertId()方法:

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

    但它也不起作用。每次我调用它时都返回0。有没有什么特别干净的方法来查找最后插入的Id?

    5 回复  |  直到 17 年前
        1
  •  11
  •   TML    11 年前

    给定一个带有表的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()”。

        2
  •  1
  •   user570307    15 年前
        3
  •  0
  •   Spontifixus    13 年前

    不要使用

    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;
    
        4
  •  -1
  •   Jason Plank Maksim Kondratyuk    14 年前
    SELECT * FROM [tablename] ORDER BY id DESC LIMIT 1
    
        5
  •  -4
  •   gmadd Charles    14 年前

    嘿,试试这个查询。但是我不懂PHP。

    SELECT *
    FROM tablename
    WHERE id = (SELECT COUNT(*) FROM tablename);
    
    推荐文章