Hello all,

Am un script php, care atunci cind este rulat are de facut ceva de genul:

$conditie = "produsele nu exista";
while ($row=mysql_fetch_object($result))
 {
 if ($conditie)
  {
  $insert1 = 'INSERT INTO table1 ... VALUES niste valori ...';
  $result1 = mysql_query($insert1);
  $insert2 = 'INSERT INTO table2 ... VALUES alte valori... ';
  $result2 = mysql_query($insert2);
  }
 else
  {
  $update1 = 'UPDATE table1 SET niste valori...';
  $result1 = mysql_query($update1);
  $update2 = 'UPDATE table2 SET alte valori...;
  $result2 = mysql_query($update2);
  }
}

Ideea este urmatoarea: se poate intimpla ca in timp ce se parcurge ciclul 
while, sa am erori la insert sau updates (nu conteaza acum din ce motive), 
caz in care nu doresc ca modificareile facute sa ramina definitive. In 
aceasta nefericita situatie, am nevoie de un mechanism prin care sa fac 
restore, la tot ceea ce s-a facut in acest cliclu in cazul in care au fost 
erori la insert sau update, sau din cine stie ce motive, ciclul while nu a 
fost efectuat complet...

M-am uitat putin pe documetatia Mysql, si am vazut ca as putea rezolva cu 
tranzactii (pe partea asta nu prea am lucrat). Ei dau urmatorul exemplu:

START TRANSACTION;
SELECT @A:=SUM(salary) FROM table1 WHERE type=1;
UPDATE table2 SET [EMAIL PROTECTED] WHERE type=1;
COMMIT;

pai si unde este ROLLBACK-ul, pe ce se aplica? Adica unde este flagul care-mi 
spune mie ca update-ul a fost ok, si ca pot sa fac COMMIT...

Aici nu stiu sa fac pentru ca pe mine ma intereseaza ceva de genul:

if ( all $result1=true AND all $result2=true)
        {
        COMMIT;
        #fa continua="true";
        $continue="true";
        }
else
        {
        ROLLBACK;
        #fa continua="false";
        $continue="false";
        }

si asta NUMAI DUPA CE S-A TERMINAT CU ciclul while, pentru ca daca totul a 
fost ok, mai trebuie sa fac inca alte citeva operatii pe alte tabele ale 
bazei de date care depind de corectitudinea executarii lui while.

Ma poate ajuta cineva?

Regards,
Alex



--- 
Detalii despre listele noastre de mail: http://www.lug.ro/


Raspunde prin e-mail lui