phpbar.de logo

Mailinglisten-Archive

[php] ODBC und auto_commit, commit, rollback .... *seufz*

[php] ODBC und auto_commit, commit, rollback .... *seufz*

Gloss Mathias php_(at)_phpcenter.de
Mon, 30 Jul 2001 12:23:01 +0200


Aloha,

ich hab bei mir zu Hause:

php 4.0.5 / linux als Modul im Indianer
sapbd 7.3.0 / linux mit odbc_pconnect() verbunden

Die DB wird =FCber odbc angesprochen (dazwischen liegt noch die
db_odbc.php aus der phplib als DB-abstraktionsklasse ...)

Folgendes Problem taucht auf (ansonsten funktioniert es einwandfrei ;))

In einem Script schalte ich das autocommit aus.
- Wenn alle inserts fehlerfrei durchliefen mach ich ein commit :
funktioniert.
- Wenn ein Fehler bei den inserts auftaucht, dann ruft die phplib ja =
die
halt()=20
  funktion auf und das Script wird mit die() beendet.
  Dabei wird aber KEIN Rollback auf der DB durchgef=FChrt (das ist =
meiner
  Ansicht nach der erste Bug).

Dann wollte ich oben erw=E4hnte halt() Funktion =E4ndern:
Abfrage ob autocommit aktiviert ist mit folgendem sinngemaessen code:

if (odbc_autocommit(link) =3D=3D false ) {
  odbc_rollback(link);
  die(...);
} else {
  die(...);
}

Sobald ich IRGENDWO odbc_autocommit(link); in meim Script stehen
habe, zeigt mir Squid nur noch "zero sized reply" an. Im Webserver Log
wird nicht mal ein Eintrag erzeugt ! (2. Bug ??)

Ok, also hab ich generell in die halt - Funktion ein rollback vor dem =
die
gemacht ---> unsch=F6n, aber funktioniert soweit.

Jetzt der Hammer:

1. Script aufgerufen, autocommit off, inserts, commit --> Werte in der =
DB.
Anderes Script aufgerufen, inserts, script fertig --> Transaktion =
wartet
auf commit, obwohl ich in dem andern Script ja gar nicht autocommit
ausgeschaltet habe ?!?  (3. Bug) ???


Hat jemand anders schon mal =E4hnliche Probleme gehabt ? Scheinbar
funktioniert
a) autocommit(link,[true/false]) nicht ohne den 2. Parameter und
b) wirkt sich autocommit auch auf alle persistenten Verbindungen aus
   (und nicht nur da wo es aufgerufen wurde)
c) Erfolgt beim Scriptende kein rollback, wenn odbc_commit()  nicht
   aufgerufen wurde.

Viele Gr=FC=DFe, Mathias


php::bar PHP Wiki   -   Listenarchive