PHP Affari DOP e auto-commit
Manuale PHP DOP di riferimento
Ora collegato tramite PDO è andato in prima dell'inizio della query, è necessario prima capire come PDO è di gestire gli affari.
supporto delle transazioni quattro proprietà (acido):
- Atomicità (Atomicità)
- La coerenza (coerenza)
- Isolation (Isolamento)
- Persistente (durata)
Più semplicemente, gli interventi effettuati in una operazione anche un'implementazione graduale, ma anche per garantire la sicurezza applicato al database, e non verrà presentata interferenze tempo ad altre connessioni.
operazioni di transazioni possono anche essere revocate automaticamente su richiesta (supponendo che non ancora presentato), che rende più facile gestire gli errori in uno script.
L'operazione di solito è fatto da una serie di variazioni "risparmio" e poi ha permesso di entrare in vigore e attuate; vantaggi di farlo è quello di fornire l'efficienza di questi può essere molto cambiata.
In altre parole, le transazioni possono rendere i vostri script più veloci e potenzialmente più robusto (è comunque necessario usarli correttamente a mietere ciò beneficio).
Purtroppo, non tutti i database supporta le transazioni, in modo che quando si apre il collegamento, DOP richiede la cosiddetta modalità di funzionamento "auto-commit".
Auto-commit mode significa che se il supporto di database, ogni esecuzione di query ha la propria transazione implicita, se il database non supporta le transazioni, no.
Se avete bisogno di una transazione, è necessario utilizzare il metodo DOP :: beginTransaction () per iniziare. Se il driver sottostante non supporta le transazioni, lanciare un PDOException eccezione (indipendentemente dal tipo di impostazioni di gestione degli errori, questa è una grave condizione di errore).
Una volta che la transazione è disponibile PDO :: commit () o PDO :: rollback () per completare, a seconda del codice di transazione è in esecuzione con successo.
Nota: DOP solo se la capacità di elaborazione delle transazioni nell'ispezione strato di driver. Se alcune condizioni di esecuzione significa che una transazione non è disponibile, e il servizio di database accetta una richiesta di avviare la transazione, PDO :: beginTransaction () restituirà ancora TRUE e nessun errore. Provare a utilizzare la transazione è un buon esempio nelle tabelle del database MyISAM MySQL.
Quando lo script è conclusa o la connessione è in procinto di essere chiusa, se non vi è una transazione completata, DOP rotolerà automaticamente la transazione. Questa misura di sicurezza consente di evitare incongruenze nello script termina inaspettatamente - se non impegnarsi in modo esplicito della transazione, quindi il presupposto è sbagliato da qualche parte, in modo che il ripristino viene effettuato per garantire la sicurezza dei dati.
Nota: avviare solo una transazione DOP :: beginTransaction () in seguito, può accadere automaticamente rollback. Se si esegue manualmente una query per avviare una transazione, la DOP non può sapere, in modo che, se necessario, non può essere rotolato indietro.
In una transazione di esecuzione batch:
Nel seguente esempio, si supponga di creare un insieme di voci per i nuovi dipendenti, assegnare un ID 23 è. Oltre ai dati di base della persona di registrazione, ma anche è necessario registrare il suo stipendio.
Entrambi gli aggiornamenti sono stati completati è molto semplice, ma con la chiusura della DOP :: beginTransaction () e la chiamata PDO :: commit (), è possibile far sì che prima che i cambiamenti, gli altri non possono vedere questi cambiamenti.
In caso di errore, il fermo di bloccare tutte le modifiche dal momento che la transazione è stata rollback fin dall'inizio, ed emette un messaggio di errore.
<?php try { $dbh = new PDO('odbc:SAMPLE', 'db2inst1', 'ibmdb2', array(PDO::ATTR_PERSISTENT => true)); echo "Connected\n"; } catch (Exception $e) { die("Unable to connect: " . $e->getMessage()); } try { $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $dbh->beginTransaction(); $dbh->exec("insert into staff (id, first, last) values (23, 'Joe', 'Bloggs')"); $dbh->exec("insert into salarychange (id, amount, changedate) values (23, 50000, NOW())"); $dbh->commit(); } catch (Exception $e) { $dbh->rollBack(); echo "Failed: " . $e->getMessage(); } ?>
Non è limitato ai cambiamenti della transazione, può emettere query complesse per estrarre i dati, ma anche per costruire ulteriori modifiche e query utilizzando tali informazioni; quando la transazione è attiva, è possibile garantire che gli altri non possono fare cambiamenti nel funzionamento in corso.