PDO SQLite 无法打开数据库
PDO SQLite Cannot Open Database
我在 Linux 环境中使用 PHP 没问题,但我正在开发一个 PHP 应用程序,该应用程序在 Windows Server 2012 上的 IIS 8 上使用 PDO 的 sqlite R2。
从数据库中读取工作正常;尝试插入或更新结果导致无用的错误,"unable to open database file"
工作正常的代码:
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" }
}
我已经尝试过的事情:
- 确保 IIS 用户具有数据库文件的 read/write 权限,
- 确保 IIS 用户对包含数据库文件的目录具有 read/write 权限。 per this question
- 检查 IIS 错误日志以了解发生了什么。 (唯一存在的是由于此请求失败而导致的无关警告。)
- 确保它与另一个数据库一起工作(与 mySQL 一起工作正常,但 sqlite 是最终应用程序的硬性要求。)
非常感谢任何帮助!
原来问题出在 IIS 上 运行 PHP 中涉及的特定用户帐户。显然,用户是 IUSR,奇怪的是 不是 IIS_Users 组的一部分。因此,将 IUSR 添加到允许用户列表中解决了问题,如 this question 中所述,我希望几天前在搜索中出现它。
我遇到了同样的问题,但使用 Apache 时发现问题的根源是一样的。
Sqlite 将需要在目录中创建额外的文件来保存事务数据,并且由于它没有在当前文件夹中写入的权限,因此在正常读取时会出现该错误。
我在 Linux 环境中使用 PHP 没问题,但我正在开发一个 PHP 应用程序,该应用程序在 Windows Server 2012 上的 IIS 8 上使用 PDO 的 sqlite R2。
从数据库中读取工作正常;尝试插入或更新结果导致无用的错误,"unable to open database file"
工作正常的代码:
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" }
}
我已经尝试过的事情:
- 确保 IIS 用户具有数据库文件的 read/write 权限,
- 确保 IIS 用户对包含数据库文件的目录具有 read/write 权限。 per this question
- 检查 IIS 错误日志以了解发生了什么。 (唯一存在的是由于此请求失败而导致的无关警告。)
- 确保它与另一个数据库一起工作(与 mySQL 一起工作正常,但 sqlite 是最终应用程序的硬性要求。)
非常感谢任何帮助!
原来问题出在 IIS 上 运行 PHP 中涉及的特定用户帐户。显然,用户是 IUSR,奇怪的是 不是 IIS_Users 组的一部分。因此,将 IUSR 添加到允许用户列表中解决了问题,如 this question 中所述,我希望几天前在搜索中出现它。
我遇到了同样的问题,但使用 Apache 时发现问题的根源是一样的。
Sqlite 将需要在目录中创建额外的文件来保存事务数据,并且由于它没有在当前文件夹中写入的权限,因此在正常读取时会出现该错误。