我在PDO中收到此错误:
错误:消息:PDO :: lastInsertId()[pdo.lastinsertid]: SQLSTATE [IM001]:驱动程序不支持此功能:驱动程序支持 不支持lastInsertId()
尝试从oracle数据库中获取最后一个插入的id时。我将序列字符串添加到最后一个插入ID函数但仍然不起作用。 Google对于使用PDO的Oracle上的这个错误并没有太多说明。
答案 0 :(得分: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));
答案 1 :(得分:0)
在Oracle中,您应该为需要自动递增列的表创建了一个oracle序列。
如果要插入,则可以同时执行,而不用查询nextIncrementId
并按以下方式插入:
$sh = $conn->prepare("INSERT INTO table (id, data) VALUES(SEQUENCE_NAME.NEXTVAL, ?)");
$sh->execute(array($valueToBeInsertedInDataColumn));
如果您只想知道最后一个插入ID,则不要使用nextval,因为无论何时调用它,它都会将值递增到下一个。为此,您应该使用CURRVAL 。下面是一个示例:
$sh = $conn->prepare("SELECT SEQUENCE_NAME.CURRVAL AS lastInsertId FROM DUAL");
$lastInserId = $sh->execute();
调试:print_r($lastInserId);