Piszę aplikację na Androida, która komunikuje się z zapleczem PHP. Backend db to SQLite 3. Problem polega na tym, że otrzymuję ten błąd sporadycznie PHP Warning: SQLite3::prepare(): Unable to prepare statement: 5, database is locked
. Otwieram połączenie z bazą danych w każdym pliku PHP i zamykam je po zakończeniu skryptu. Myślę, że problem polega na tym, że jeden skrypt zablokował plik bazy danych podczas zapisywania do niego, a drugi skrypt próbował uzyskać do niego dostęp, co nie powiodło się. Jednym ze sposobów uniknięcia tego byłoby udostępnienie połączenia między wszystkimi skryptami php. Zastanawiałem się, czy jest jakikolwiek inny sposób uniknięcia tego?Baza danych zablokowana podczas próby uzyskania dostępu ze skryptu PHP
Edit: Jest to pierwszy plik:
<?php
$first = SQLite3::escapeString($_GET['first']);
$last = SQLite3::escapeString($_GET['last']);
$user = SQLite3::escapeString($_GET['user']);
$db = new SQLite3("database.db");
$insert = $db->prepare('INSERT INTO users VALUES(NULL,:user,:first,:last, 0 ,datetime())');
$insert->bindParam(':user', $user, SQLITE3_TEXT);
$insert->bindParam(':first', $first, SQLITE3_TEXT);
$insert->bindParam(':last', $last, SQLITE3_TEXT);
$insert->execute();
?>
Oto drugi plik:
<?php
$user = SQLite3::escapeString($_GET['user']);
$db = new SQLite3("database.db");
$checkquery = $db->prepare('SELECT allowed FROM users WHERE username=:user');
$checkquery->bindParam(':user', $user, SQLITE3_TEXT);
$results = $checkquery->execute();
$row = $results->fetchArray(SQLITE3_ASSOC);
print(json_encode($row['allowed']));
?>
Najpierw udostępnij kod –
Kod dodany i opis więcej –