SQLite Database table locked

Hallo,

ich bekomme immer wieder die Fehlermeldung „Database table is locked“, wenn ich mit PHP5 in SQLite ( Version 2.8.14 ) ein UPDATE machen möchte und vorher aus dieser Tabelle mit einem SELECT, welches einen Maximalwert ermittelt, gelesen habe.

Jemand ne Ahnung, an was das liegt und wie man das umgehen kann?

Die Tabelle mit bischen Inhalt:

CREATE TABLE news ( newsid INTEGER PRIMARY KEY, sortierung TINYINT NOT NULL, created INT NOT NULL, news\_de TEXT NOT NULL, news\_en TEXT NOT NULL );
CREATE INDEX sort ON news(sortierung);
INSERT INTO news VALUES ('1', '5', '2005-06-24', 'Hallo, das ist die erste News hier', 'Hello, this is the frist news here');
INSERT INTO news VALUES ('2', '6', '2005-06-25', 'Die 2te News', 'The second news');
INSERT INTO news VALUES ('3', '7', '2005-06-26', 'News Nummer 3', 'News number three');

PHP Quellcode:

$query = "SELECT max(sortierung) as maxPos FROM news";
$maxPos = $db-\>SelectAssoc($query);
//Die Position muss mindestens 1 sein, aber maximal die größe Nummer in Tabelle +1.
$position = min($position, max(1, ++$maxPos[0]['maxPos']));

$result = $db-\>query("UPDATE news SET sortierung=sortierung+1");

Anmerkung zum $db-Objekt: Hier wird nur der entsprechende PHP-SQLite Befehl aufgerufen und Fehlerbehandlung durchgeführt.

Lösung gefunden
Lag doch nicht an dem SELECT, sondern an einem sqlite_fetch_column_types(), welches kurz zuvor auf diese Tabelle ausgeführt wird (Hatte das übersehen :frowning: ).
Dieser Befehl sperrt mir scheinbar die Tabelle für Schreibzugriff bis die Verbindung geschlossen wird.

Umgehen konnte ich das Problem nun, indem ich statt der Funktion einen Query „PRAGMA table_info(tabellenname)“ per sqlite_array_query() an die Datenbank geschickt habe.