为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

梵蒂冈之花 2019-11-12 14:01:51
我有一个用于网站的SQLite数据库。问题是当我尝试INSERT INTO时,我会得到一个PDOExceptionSQLSTATE[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查询时才会发生。有什么想法吗?
查看完整描述

3 回答

?
子衿沉夜

TA贡献1828条经验 获得超3个赞

这个问题,因为它的出现,就是PDO SQLite的驱动程序要求,如果你打算做一个写操作(INSERT,UPDATE,DELETE,DROP,等),然后将文件夹的数据库驻留在必须有写权限,以及实际数据库文件。


我在PDO SQLite驱动程序手册页最底部的注释中找到了此信息。


查看完整回答
反对 回复 2019-11-12
?
慕田峪9158850

TA贡献1794条经验 获得超7个赞

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


谁拥有SQLite文件?您?


脚本以谁身份运行?Apache还是没人?


查看完整回答
反对 回复 2019-11-12
?
MYYA

TA贡献1868条经验 获得超4个赞

对我而言,问题在于SELinux的实施而非许可。一旦我禁用了强制执行功能, “只读数据库”错误就消失了,这是史蒂夫五世在对已接受答案的评论中提出的建议。


echo 0 >/selinux/enforce

运行此命令后,一切都会按预期进行(CentOS 6.3)。


我遇到的特定问题是在Graphite的安装过程中。我已对apache用户拥有的内容进行了三重检查,并且可以同时写入我的graphing.db及其父目录。但是直到我“修复” SELinux之前,我得到的只是堆栈跟踪,以达到以下效果:DatabaseError:尝试编写一个只读数据库


查看完整回答
反对 回复 2019-11-12
  • 3 回答
  • 0 关注
  • 1100 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信