PEAR DB - non trovo mysql_insert_id

Nel mio script c'è una query INSERT

subito dopo devo fare una SELECT sul dato inserito

in php c'è la funzione mysql_insert_id() che restituisce id AUTO_INCREMENT dell'ultima INSERT eseguita.

Ma sto usando le librerie DB di PEAR che utilizza delle classi per eseguire operazioni al database.

Spulciando il manuale però non sono riuscito a trovare un modo che eseguisse mysql_insert_id ();

Avete mai avuto un'esigenza simile?

Come potrei risolvere?

inviato 10 anni fa
arjuna
X 0 X

I campi autoincrement di MySQL sono una peculiarità di questo database. Non tutti i database supportano questa caratteristica. Alcuni hanno caratteristiche simili, chiamate sequenze.

PEAR::DB è un layer di astrazione per l'accesso ai dati, permette di scrivere codice che funzionerà indipendentemente dal database che concretamente verrà utilizzato. Questo comporta diversi problemi nell'utilizzo di tutte quelle funzionalità appartenenti solo a specifici DB.

In particolare i campi autoincrementanti vengono gestiti in maniera un diversa da come fa l'estensione mysql. PEAR::DB infatti implementa personalmente una tecnica basata sulle sequenze. Sono disponibili tre metodi (nextId, createSequence e dropSequence) per creare una sequenza, ottenere l'id successivo e cancellare una sequenza. Ogni sequenza ha un nome ed è costituita da un numero che si autoincrementa ad ogni chiamata di nextId. Alla prima chiamata di nextID con un nuovo nome di sequenza viene automaticamente creata una nuova sequenza e viene restituito il numero 1. Le successive chiamate a nextId produrranno la restituzione di un numero che va via via incrementandosi. Quindi in realtà l'unica funzione da utilizzare delle 3 è nextId

Se si ha bisogno di un unico id autoincrementante per una tabella conviene chiamare la sequenza con lo stesso nome della tabella (per comodità). Spesso infatti nextId viene chiamato così:

$id = $db->nextId('nome_tabella');

Attenzione quindi a non chiamare più volte nextId anche se non sono state fatte delle insert nel DB. La sequenza generata da PEAR::DB è infatti completamente scorrelata dagli inserimenti nella tabella!!!

PEAR::DB infatti crea una tabella appositamente per ciascuna sequenza, dove memorizza questi numeri. In questo modo ricorda a che numero è arrivata una sequenza.

Tutto questo per mantenere la portabilità del tuo codice su tutti i database supportati da PEAR::DB. Se invece non ti interessa questa compatibilità ti basta fare una query:

$last_id = $PEAR_DB_Object->getOne( "SELECT LAST_INSERT_ID() FROM nome_tabella" );

 :bye:

risposto 10 anni fa
Gianni Tomasicchio
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda