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会引发有关写入只读数据库的错误。
我看来,修改数据库时需要将日志文件写入您的数据库的目录,因此需要在目录上写入权限。 – Joshua
这节省了一天! – David