使用PHP PDO获取导致IGNORE的SQLite行的ID


Getting ID of SQLite row that caused the IGNORE with PHP PDO

我有一个带有UNIQUE约束的SQLite表,简化如下:

CREATE TABLE addresses (
addressID INTEGER PRIMARY KEY, 
officeName TEXT,
address TEXT NOT NULL CHECK(address<>''),
UNIQUE (officeName, address)

我将新地址添加到列表中,并使用类似的PHP PDO获取新ID

$sth = $db->prepare("INSERT OR IGNORE INTO addresses (officeName,address) VALUES (?,?)");
$sth->execute(array($office,$address));
$thisAddressID = $db->lastInsertId();

前两行在地址不存在的情况下(且仅当该地址不存在时)向数据库添加地址。最后一行给出了新添加地址的ID…如果添加了地址。否则,它只会给我最后添加地址的ID。我想知道的是,如果INSERT由于重复而被忽略,是否有一些好的方法可以获得导致IGNORE的行的ID。我想我可以手动缓存和比较最后插入的ID,如果我再次获得相同的ID,请执行SELECT并搜索ID。但我有点希望有一种更有效的内置方法来获取该值。

没有内置的机制;您必须执行单独的SELECT。