为什么PDO的Oracle驱动程序不实现lastInsertId()?

Myt*_*iel 6 php oracle pdo last-insert-id

我在PDO中收到此错误:

错误:消息:PDO :: lastInsertId()[pdo.lastinsertid]:SQLSTATE [IM001]:驱动程序不支持此功能:驱动程序不支持lastInsertId()

当试图从oracle数据库中获取最后一个插入的id时.我将序列字符串添加到最后一个插入ID函数但仍然不起作用.Google对于使用PDO的Oracle上的此错误并未说太多.

Mar*_*ker 10

Oracle没有自动增量列,因此不支持lastInsertId与MySQL相同.您必须使用Oracle序列"手动"实现等效.

为每个需要它的表创建一个oracle序列,并在需要进行插入时使用NEXTVAL检索它,然后在插入表时使用该值.

$sh = $conn->prepare('SELECT uid_seq.NEXTVAL AS nextInsertID FROM DUAL');
$sh->execute();
$nextInsertId = $sh->fetchColumn(0);

$sh = $conn->prepare("INSERT INTO table (id, data) VALUES(?, 255)");
$sh->execute(array($nextInsertId));
Run Code Online (Sandbox Code Playgroud)

  • INSERT INTO表(id,data)VALUES(uid_seq.NEXTVAL,255); 然后是SELECT uid_seq.CURRVAL AS lastInsertID FROM DUAL; 也是完全有效的....但LASTVAL不存在 (3认同)