2011-10-05 53 views
4

我在PHP腳本中遇到奇怪的錯誤,當涉及SQLite3 :: exec時,腳本能夠連接到數據庫文件沒有問題,我可以做選擇查詢沒有問題,但是當我嘗試執行插入查詢時,SQLite3 :: lastErrorMsg出現此錯誤「無法打開數據庫文件」。下面是我如何試圖做這樣的一個例子:PHP SQLite3 ::執行失敗

<?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; 
} 
?> 

我知道,在附加功能它可以連接到數據庫,因爲在db_connect功能if語句不會被觸發,如果我更改權限將devices.db文件設置爲只讀exec會引發有關寫入只讀數據庫的錯誤。

回答

13

我有同樣的失敗,你需要對數據庫文件和目錄的讀/寫權限。

+0

我看來,修改數據庫時需要將日誌文件寫入您的數據庫的目錄,因此需要在目錄上寫入權限。 – Joshua

+0

這節省了一天! – David