Frage

Ich erhalte diesen Fehler in PDO:

Fehler: Meldung: pdo :: lastInsertId () [pdo.lastinStid]:

Beim Versuch, die letzte eingefügte ID aus einer Oracle -Datenbank zu erhalten. Ich habe die Sequenzzeichenfolge zur letzten Einfügungs -ID -Funktion hinzugefügt, funktioniert aber immer noch nicht. Google sagt nicht viel über diesen Fehler bei Oracle mit PDO.

War es hilfreich?

Lösung

Oracle hat keine automatischen Spalten, daher wird LastInsertid nicht auf die gleiche Weise unterstützt wie bei MySQL. Sie müssen das Äquivalent "von Hand" mit Oracle -Sequenzen implementieren.

Erstellen Sie eine Oracle -Sequenz für jede Tabelle, die sie benötigt, und verwenden Sie sie mit NextVal, um sie abzurufen, wenn Sie einen Einsatz durchführen müssen, und verwenden Sie diesen Wert, wenn Sie in die Tabelle einfügen.

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

Andere Tipps

In Oracle sollten Sie eine Oracle -Sequenz für Tabellen erstellt haben, für die eine automatische Inkrement -Spalte erforderlich ist.

Wenn Sie einfügen möchten, können Sie es gleichzeitig tun, anstatt abzufragen nextIncrementId und wie unten einfügen:

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

Wenn Sie nur die letzte Einfügungs -ID kennen möchten, dann Verwenden Sie NextVal nicht, denn wann immer Sie es nennen, erhöht es den Wert auf den nächsten. Sie sollten Currval für diesen Zweck verwenden. Unten ist ein Beispiel:

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

Debuggen: print_r($lastInserId);

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top