如何在SQLite中获取最后一个插入ID?

DEV*_*OPS 18 php sql sqlite function lastinsertid

SQLite中是否有可用的内置函数来获取最后插入的行id.例如: - 在mysql中我们有LAST_INSERT_ID()这种功能.对于sqllite,任何可用于执行相同过程的函数.

请帮我.

谢谢

Tre*_*non 21

SQLite的

这可以使用SQLite last_insert_rowid()函数:

last_insert_rowid()函数从调用该函数的数据库连接返回最后一行插入的ROWID.last_insert_rowid()SQL函数是sqlite3_last_insert_rowid()C/C++接口函数的包装器.

PHP

这个函数的PHP版本/绑定是sqlite_last_insert_rowid():

返回最近插入数据库dbhandle的行的rowid(如果它是作为自动增量字段创建的).

  • @rogerdpack,您是否有参考资料表明这不是线程安全的?答案中提供的参考指出它提供了最后一行插入 _"来自调用函数的数据库连接"_ - 这会让我认为它 _is_ 线程安全,除非您有多个线程使用相同的连接。而如果您有多个线程通过不同的连接插入,那么每个线程将正确地看到同一线程插入的最后一行 ID(这通常是用于的,与 OP 想要模仿的 LAST_INSERT_ID() 相同)。 (2认同)
  • @MikeThomson 公平问题:http://www.sqlite.org/c3ref/last_insert_rowid.html “如果一个单独的线程在 sqlite3_last_insert_rowid() 函数运行时在同一个数据库连接上执行一个新的 INSERT,从而改变了最后一个插入 rowid,那么 sqlite3_last_insert_rowid() 返回的值是不可预测的,并且可能不等于旧的或新的最后插入 rowid。” 另见 http://stackoverflow.com/q/2127138/32453 (2认同)

小智 15

将SQLite版本3与PDO SQLite一起使用时,它可以是这样的:

$insert = "INSERT INTO `module` (`mid`,`description`) VALUES (
            NULL,
            :text
            );
        ";
$stmt = $conn->prepare($insert);
$stmt->execute(array(':text'=> $text));

echo $conn->lastInsertId()
Run Code Online (Sandbox Code Playgroud)


Ale*_* K. 5

它有last_insert_rowid()

last_insert_rowid() 函数返回从调用该函数的数据库连接插入的最后一行的 ROWID