#php #sqlite
#php #sqlite
Вопрос:
У меня странная ошибка в PHP-скрипте, когда дело доходит до SQLite3 ::exec, скрипт может подключаться к файлу базы данных без проблем, и я могу выполнить запрос select без проблем, но когда я пытаюсь выполнить запрос insert, SQLite3::lastErrorMsg выдает эту ошибку «невозможно открыть файл базы данных «. Вот пример того, как я пытаюсь это сделать:
<?php
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
add();
} else {
mainpage();
}
function mainpage() {
$db = db_connect();
$results = $db->query('SELECT * FROM devices'); // Works just fine
while (list($id, $name, $ip, $addr, $status) = $results->fetchArray());
print "ID: $id, Name: $name, IP Address: $ip, MAC Address: $addr, Status: $status";
}
$db->close();
}
function add() {
$db = db_connect();
$query = $db->exec("INSERT INTO devices (name,ip,address,status) VALUES ('BB1', '192.168.1.5', '01:2D:45:AD:D3:A0', '1')");
if (!$query) {
die("Database transaction failed: " . $db->lastErrorMsg() );
}
mainpage();
$db->close();
die;
}
function db_connect() {
class DB extends SQLite3 {
function __construct( $file ) {
$this->open( $file );
}
}
$db = new DB('devices.db');
if ($db->lastErrorMsg() != 'not an error') {
print "Database Error: " . $db->lastErrorMsg() . "<br />"; //Does not get triggered
}
return $db;
}
?>
Я знаю, что в функции add он может подключаться к базе данных, потому if
что оператор в функции db_connect никогда не запускается, и если я изменю разрешения для файла devices.db, чтобы он был доступен только для чтения, exec выдает ошибку о записи в базу данных, доступную только для чтения.
Ответ №1:
у меня был тот же сбой, вам нужны разрешения на чтение / запись для файла db И каталога.
Комментарии:
1. Похоже, что файлы журнала необходимо записывать в каталог вашей БД при изменении БД, отсюда и nee для разрешений на запись в каталог.
2. Это спасло положение!