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.