我正在寫一個與PHP後端進行通信的Android應用程序。後端數據庫是SQLite 3.問題是,我間歇性地得到這個錯誤PHP Warning: SQLite3::prepare(): Unable to prepare statement: 5, database is locked
。我打開每個PHP文件中的數據庫連接並在腳本結束時關閉它。我認爲問題在於一個腳本在寫入數據庫文件時鎖定了數據庫文件,第二個腳本試圖訪問它,失敗了。避免這種情況的一種方法是共享所有的PHP腳本之間的連接。我想知道是否有其他方法可以避免這種情況?嘗試從PHP腳本訪問時數據庫被鎖定
編輯: 這是第一個文件:
<?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();
?>
這裏是第二個文件:
<?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']));
?>
第一次共享代碼 – 2012-03-26 03:33:55
添加的代碼和更多描述 – 2012-03-26 03:42:32