Domanda

ottengo questo errore in PDO:

errore: Messaggio: PDO :: lastInsertId () [pdo.lastinsertid]: SQLSTATE [IM001]: driver non supporta questa funzione: il driver fa Non sostenere lastInsertId ()

quando si cerca di ottenere lo scorso id inserita da un database Oracle. Ho aggiunto la stringa di sequenza fino all'ultima funzione di inserimento id, ma ancora non funziona. Google non dice molto riguardo a questo errore su Oracle DOP.

È stato utile?

Soluzione

Oracle non ha colonne autoincremento, quindi lastInsertId non è supportato nello stesso modo come per MySQL. È necessario implementare l'equivalente "a mano" utilizzando le sequenze di Oracle.

Creare una sequenza di Oracle per ogni tavolo che lo richiede, e utilizzare NEXTVAL per recuperare ogni volta che è necessario fare un inserto, quindi utilizzare tale valore quando si inserisce nella tabella.

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

Altri suggerimenti

In Oracle, si dovrebbe aver creato una sequenza di Oracle per le tabelle che richiede una colonna di incremento automatico.

Se si desidera inserire, allora si può fare nello stesso tempo, piuttosto che di query nextIncrementId ed inserto come di seguito:

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

Se si desidera solo conoscere l'ultimo ID inserto, quindi non utilizzare nextval perché ogni volta che si voglia chiamare, è aumentare il valore a quello successivo. Si dovrebbe usare CURRVAL a tale scopo . Di seguito è riportato un esempio:

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

Debug: print_r($lastInserId);

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top