Вопрос

Я получаю эту ошибку в PDO:

Ошибка: Сообщение: PDO :: LastinSertId () [PDO.LastInserTid]: SQLState [IM001]: Driver не поддерживает эту функцию: Driver не поддерживает LastInserTid ()

При попытке получить последний вставленный идентификатор из базы данных Oracle. Я добавил строку последовательности в последнюю функцию идентификатора вставки, но все еще не работал. Google мало говорит об этой ошибке на Oracle с PDO.

Это было полезно?

Решение

У 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));

Другие советы

В Oracle вы должны были создать Oracle -последовательность для таблиц, для которой требуется столбец автоматического приращения.

Если вы хотите вставить, то вы можете сделать это в одно и то же время, а не запросить nextIncrementId и вставьте, как ниже:

$sh = $conn->prepare("INSERT INTO table (id, data) VALUES(SEQUENCE_NAME.NEXTVAL, ?)");
$sh->execute(array($valueToBeInsertedInDataColumn));

Если вы просто хотите узнать последний идентификатор вставки, тогда Не используйте NextVal, потому что всякий раз, когда вы его называете, он увеличивает значение к следующему. Вы должны использовать Curval для этой цели. Анкет Ниже приведен пример:

$sh = $conn->prepare("SELECT SEQUENCE_NAME.CURRVAL AS lastInsertId FROM DUAL");
$lastInserId = $sh->execute();

Отлаживать: print_r($lastInserId);

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top