我在Linux环境中使用PHP做得很好,但我正在开发一个在Windows Server 2012 R2上的IIS 8上使用PDO的sqlite的PHP应用程序。
从数据库中读取工作正常;试图插入或更新相当无用的错误的结果,"无法打开数据库文件"
if (!($db = new PDO('sqlite:assets/database.db'))) { ?>
...
} else {
$stmt="SELECT
... ";
$stmt = $db->prepare($stmt);
$stmt->execute(array(":person" => $this->uid));
}
if (!($db = new PDO('sqlite:assets/database.db'))) { ?>
...
} else {
$stmt = "INSERT INTO bills(date, label, categ, amount, timestamp) VALUES(?, ?, ?, ?, ?)";
$stmt = $db->prepare($stmt);
var_dump($stmt->errorInfo());
// yields : array(3) { [0]=> string(0) "" [1]=> NULL [2]=> NULL }
$stmt->execute([$fData['date'], $fData['label'], $fData['categ'], $fData['amount'], $fData['timestamp']]);
var_dump($stmt->errorInfo());
// yields : array(3) { [0]=> string(5) "HY000" [1]=> int(14) [2]=> string(28) "unable to open database file" }
}
任何帮助都非常感谢!
答案 0 :(得分:1)
我遇到了同样的问题,但与Apache合作,结果发现问题的根源是相同的。
Sqlite需要在目录中创建其他文件来保存事务数据,因为它没有在当前文件夹中写入的权限,所以在读取工作正常时会出现该错误。
答案 1 :(得分:0)
事实证明,问题在于在IIS上运行PHP所涉及的特定用户帐户。显然,用户是IUSR,奇怪的是不是IIS_Users组的一部分。因此,将IUSR添加到允许的用户列表中解决了问题,如this question中所述,我希望几天前在搜索中出现。