Transaction mit PHP und MySQL

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Transaction mit PHP und MySQL

    Hallo!



    Ich habe eine Problem mit Transaction.
    In einer Tabelle soll ein Status geändert werden, und
    in der anderen sozusagen die Status gezählt werden.

    Aber wenn die zweite Abfrage einen Fehler hat, wird
    die erste trotzdem in die DB geschrieben.

    Die Vorgehensweise ist doch richtig, oder?

    PHP-Code:
    mysql_query('START TRANSACTION') or die(mysql_error());

    $qry1 "UPDATE table1 SET status = 'AKTIV' WHERE id = 1  LIMIT 1";
    mysql_query($qry1) or die(mysql_error());

    $qry2 "UPDATE table2 SET num = num+1 WHERE id = 1  LIMIT 1";
    mysql_query($qry2) or die(mysql_error());

    mysql_query('COMMIT') or die(mysql_error()); 
    fragen macht spass, denken nicht

  • #2
    standard arbeitet MySQL mit autocommit, d.h. es wird sofort in die DB eingetragen. Wenn du kontrollierte Transaction haben willst, musst du zuerst autocommit ausschalten

    SET AUTOCOMMIT=0

    dann klappt's auch mit Transaction, Commit und Co.

    Kommentar


    • #3
      ok, 1000 dank!

      jetzt funktioniert's!
      fragen macht spass, denken nicht

      Kommentar


      • #4
        Wobei ich es für sinnvoll halten würde im Fehlerfall explizit ein ROLLBACK durchzuführen ... allein um als Programmierer die Kontrolle zu behalten ... !
        carpe noctem

        [color=blue]Bitte keine Fragen per EMail ... im Forum haben alle was davon ... und ich beantworte EMail-Fragen von Foren-Mitgliedern in der Regel eh nicht![/color]
        [color=red]Hinweis: Ich bin weder Mitglied noch Angestellter von ebiz-consult! Alles was ich hier von mir gebe tue ich in eigener Verantwortung![/color]

        Kommentar


        • #5
          Von wegen, es geht... :-(

          Wenn ein Fehler in der Zweiten Abfrage passiert, wird die erste trotzdem in die DB geschrieben.

          Weiss jemand woran das liegen könnte?

          PHP-Code:
          mysql_query('SET AUTOCOMMIT = 0') or die(mysql_error());
          mysql_query('START TRANSACTION') or die(mysql_error());

          $qry1 "UPDATE table1 SET status = 'AKTIV' WHERE id = 1  LIMIT 1";
          mysql_query($qry1) or die(mysql_error());

          $qry2 "UPDATE table2 SET num = num+1 WHERE id = 1  LIMIT 1";
          mysql_query($qry2) or die(mysql_error());

          mysql_query('COMMIT') or die(mysql_error()); 
          fragen macht spass, denken nicht

          Kommentar

          Lädt...
          X