|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Dec 2003
Messaggi: 1776
|
[PHP] Schema per transazioni con db
Mi trovo a dover eseguire sul db 3 query diverse, in particolare 3 delete su diverse tabelle, ma devo essere sicuro che vengano effettuate tutte e 3 oppure nessuna.
Mi sono trovato in passato in questa situazione usando JSP ed ho risolto impostando l'autocommit a false, messo le diverse query all'interno di un try, committate (azz che brutta parola) e poi messo una catch con rollback. Una cosa così: Codice:
try {
conn.setAutocommit(false);
query1 = "Un'operazione sul db";
query2 = "Un'altra operazione sul db";
query3 = "Un'ultima operazione sul db";
query1.executeUpdate();
query2.executeUpdate();
query3.executeUpdate();
conn.commit();
}
catch (SQLException ex) {
//vari messaggi d'errore
conn.rollback();
}
ecc, ecc...
Come sarebbe lo schema da seguire? Come imposto l'autocommit a false? Come si fa il commit di una query se l'autocommit è false? Come si esegue il rollback? |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Mar 2006
Città: Bergamo
Messaggi: 2499
|
si ma con che database? dai un occhio a PDO
http://it.php.net/pdo
__________________
ho concluso con: kvegeta, doctordb, Leland Gaunt.
|
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Dec 2003
Messaggi: 1776
|
Vero, ho dimenticato il db... mysql.
Ora darò un'occhiata al link che mi hai dato. |
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Dec 2003
Messaggi: 1776
|
Ho visto questo PDO, ma per ciò che devo fare io mi sembra una cosa un po' esagerata, in tutta l'applicazione ho 4 o 5 transazioni, non vale la pena installare una cosa del genere.
Preferirei gestirmele a mano. Come posso fare? |
|
|
|
|
|
#5 | |
|
Senior Member
Iscritto dal: Mar 2006
Città: Bergamo
Messaggi: 2499
|
Quote:
certo puoi evitare di usare PDO: http://it2.php.net/mysql http://rejex.wordpress.com/2008/01/0...l-transaction/
__________________
ho concluso con: kvegeta, doctordb, Leland Gaunt.
|
|
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: Dec 2003
Messaggi: 1776
|
Si si, ho MySQL 5.1
Ho risolto così Codice:
mysql_query("SET AUTOCOMMIT=0");
mysql_query("START TRANSACTION");
$del_tab1 = mysql_query("DELETE FROM tab1 WHERE codice='".$codice."'",$db);
$del_tab2 = mysql_query("DELETE FROM tab2 WHERE codice='".$codice."'",$db);
$del_tab3 = mysql_query("DELETE FROM tab3 WHERE codice='".$codice."'",$db);
if((!$del_tab1) || (!$del_tab2) || (!$del_tab3)) {
mysql_query("ROLLBACK");
mysql_query("SET AUTOCOMMIT=1");
return false;
}
else {
mysql_query("COMMIT");
mysql_query("SET AUTOCOMMIT=1");
return true;
}
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 05:39.











ho concluso con: kvegeta, doctordb, Leland Gaunt.









