shordy: SQLite3 - Datenbankverbindung schliessen

Hallo,

ich habe ein echt großes Problem mit dem Schliessen von SQLite3 Datenbanken.

Ok, sagen wir ich öffne eine Datenbank mit

$Users = new SQLite3($path);

später im Script schliesse das mit $Users->close();

Soweit so gut. Nach dem Ausführen des Scriptes ist die Datei wieder frei. Ich kann sie zum Beispiel in Windows umbenennen.

Das Problem ergibt sich, wenn zwischen dem Connecten und dem Closen eine Abbruch im Script stattfindet. Meinetwegen durch Syntaxfehler.

Die Datei lässt sich dann nicht mehr umbenennen, mit dem Hinweis "die DAtei wird gerade benutzt". Nichts hilft mehr. Auch nicht Neuausführung des Scriptes. Alles was ich machen kann, ist die WAMP-Services neuzustarten.

Google hat nichts ergeben. Bitte sagt mir, wie ich das umgehen kann.

Liebe Grüße

shordy

  1. Hi!

    Das Problem ergibt sich, wenn zwischen dem Connecten und dem Closen eine Abbruch im Script stattfindet. Meinetwegen durch Syntaxfehler.
    Die Datei lässt sich dann nicht mehr umbenennen, mit dem Hinweis "die DAtei wird gerade benutzt". Nichts hilft mehr. Auch nicht Neuausführung des Scriptes. Alles was ich machen kann, ist die WAMP-Services neuzustarten.

    Hört sich nach einem Fehler in PHP an. Normalerweise schließt PHP geöffnete Ressourcen auch beim Abbruch von Scripts.

    Google hat nichts ergeben. Bitte sagt mir, wie ich das umgehen kann.

    Vermutlich gar nicht. Einen eigenen Error-Handler zu schreiben, in dem die Verbindung geschlossen wird, hilft nur bei den Fehlern, die einen Error-Handler aufrufen.

    Lo!

    1. Vermutlich gar nicht. Einen eigenen Error-Handler zu schreiben, in dem die Verbindung geschlossen wird, hilft nur bei den Fehlern, die einen Error-Handler aufrufen.

      Vielen Dank. Das es nicht geht, ist ja eine wichtige Info.
      Werde dann versuchen, das Objekt zu kopieren und die Verbindung "schnell" wieder manuell zu schliessen.

      Liebe Grüße

      shordy

      1. Hi!

        Werde dann versuchen, das Objekt zu kopieren und die Verbindung "schnell" wieder manuell zu schliessen.

        Das SQLite3-Objekt brauchst du solange geöffnet, wie du Daten abfragen oder bearbeiten willst. Oder welches Objekt meinst du jetzt genau? Es bleiben noch genügend Vorgänge übrig, die bei geöffneter Verbindung auszuführen sind. Während all dieser Vorgänge kann dir das Script wegen irgendwelcher Fehler abstürzen und die Verbindung offen lassen. Du gewinnst mit einer schnelleren Schließung vielleicht etwas mehr, aber keine umfangreiche Sicherheit. Besser wäre, den Fehler zu melden und beheben zu lassen - alternativ auf ein DBMS ausweichen.

        Lo!

        1. Das SQLite3-Objekt brauchst du solange geöffnet, wie du Daten abfragen oder bearbeiten willst. Oder welches Objekt meinst du jetzt genau?

          Ja, das meinte ich. Habe ich auch gerade bemerkt, dass es nicht funktioniert.
          Die Verbindung muss offen sein, ein Kopieren des results allein reicht nicht.

          Es bleiben noch genügend Vorgänge übrig, die bei geöffneter Verbindung auszuführen sind. Während all dieser Vorgänge kann dir das Script wegen irgendwelcher Fehler abstürzen und die Verbindung offen lassen. Du gewinnst mit einer schnelleren Schließung vielleicht etwas mehr, aber keine umfangreiche Sicherheit. Besser wäre, den Fehler zu melden und beheben zu lassen - alternativ auf ein DBMS ausweichen.

          Das werde ich dann wohl bald tun.
          Vielen Dank