PHP SQLite3 :: ошибка exec - PullRequest
       6

PHP SQLite3 :: ошибка exec

4 голосов
/ 05 октября 2011

У меня странная ошибка в скрипте PHP, когда дело доходит до SQLite3 :: exec, скрипт может без проблем подключиться к файлу базы данных, и я могу сделать запрос выбора без проблем, но когда я пытаюсь сделать запрос на вставку, 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 Ответ

13 голосов
/ 08 ноября 2011

У меня была такая же ошибка, вам нужны разрешения на чтение / запись для файла базы данных и каталога.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...