插入期间出现SQLite错误“试图编写只读数据库”?

我有一个用于网站的SQLite数据库。问题是当我尝试INSERT INTO时,我会得到一个PDOException


SQLSTATE[HY000]: General error: 8 attempt to write a readonly database

我通过SSH进入服务器并检查了权限,数据库具有该权限


-rw-rw-r--

我对* nix权限不太熟悉,但是我很确定这意味着


不是目录

所有者拥有读/写权限(根据,就是我ls -l)

组具有读/写权限

其他所有人仅具有读取权限

我还浏览了我知道使用该sqlite3程序的任何地方,但没有发现任何相关信息。


因为我不知道PDO试图以什么权限打开数据库,所以我做了


chmod o+w supplies.db

现在,我得到另一个PDOException:


SQLSTATE[HY000]: General error: 14 unable to open database file

但是它仅在打开数据库后尝试执行INSERT查询时才会发生。


有什么想法吗?


梵蒂冈之花
浏览 1111回答 3
3回答

子衿沉夜

这个问题,因为它的出现,就是PDO SQLite的驱动程序要求,如果你打算做一个写操作(INSERT,UPDATE,DELETE,DROP,等),然后将文件夹的数据库驻留在必须有写权限,以及实际数据库文件。我在PDO SQLite驱动程序手册页最底部的注释中找到了此信息。

慕田峪9158850

当SQLite文件本身的所有者与运行脚本的用户不同时,可能会发生这种情况。如果无法写入整个目录路径(即沿途的每个目录),则可能会发生类似的错误。谁拥有SQLite文件?您?脚本以谁身份运行?Apache还是没人?

MYYA

对我而言,问题在于SELinux的实施而非许可。一旦我禁用了强制执行功能, “只读数据库”错误就消失了,这是史蒂夫五世在对已接受答案的评论中提出的建议。echo 0 >/selinux/enforce运行此命令后,一切都会按预期进行(CentOS 6.3)。我遇到的特定问题是在Graphite的安装过程中。我已对apache用户拥有的内容进行了三重检查,并且可以同时写入我的graphing.db及其父目录。但是直到我“修复” SELinux之前,我得到的只是堆栈跟踪,以达到以下效果:DatabaseError:尝试编写一个只读数据库
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

SQL Server