【问题标题】:Yes, again a SQLSTATE[HY000] [14]是的,又是一个 SQLSTATE[HY000] [14]
【发布时间】:2018-10-20 15:45:18
【问题描述】:

我尽可能阅读网络上的所有帖子(不仅在这个精彩的论坛中),我现在使用 5 年前的 SQLite,但我仍然是这个“错误”(我不知道它是如何命名的):SQLSTATE[ HY000] [14]

  • 是的,我的文件夹是可写的
  • 是的,这个 sqlite 文件是可写的
  • 是的用户和组设置为 www-data(服务器用户)
  • 是的,我已经设置了 sqlite 并在同一台服务器上使用它(所以不是配置问题)

那到底是怎么回事?

ls:

user@host:/folder/where/is/the/site$ ls -lha db_folder/
total 36K
drwxrwxr-x 3 www-data www-data 4.0K May 10 06:15 .
drwxr-xr-x 3 www-data www-data 4.0K May 10 06:34 ..
-rwxrwxrwx 1 www-data www-data  36K May 10 05:22 db.sqlite

提前致谢。

编辑:我的 php 代码,即使它对我来说不是很具体:

$db = new PDO('sqlite:dbname=./db_folder/db_file.sqlite', '', '', array(PDO::ATTR_PERSISTENT => true));
$articles = $db->query('SELECT * FROM articles ORDER BY name')->fetchAll();

【问题讨论】:

  • Stack Overflow 是一个编程和开发问题的网站。这个问题似乎离题了,因为它与编程或开发无关。请参阅帮助中心的What topics can I ask about here。也许Unix & Linux Stack ExchangeDatabase Administrators Stack Exchange 会是一个更好的提问地点。
  • 是否有可能还有另一个 SQLite 进程在某个地方(或其他进程)运行,它仍然拥有数据库文件的句柄?你已经被每个人都做到了rwx,所以权限应该不再是一个问题(顺便说一下,你可能不想在生产中这样做)。
  • 当然不是生产配置,我只是尝试制作 sqlite 作品 :) 但我认为没有启动另一个实例,我现在上传它并在之后尝试....跨度>
  • 代码可能有问题。但只要你保密,没有人会知道。
  • 我的代码很简单:一个新的 PDO 对象。即使我在创建对象后退出,我也有这个错误....

标签: php linux sqlite


【解决方案1】:

sqlite 文件在进程写入时被锁定。请参阅有关此here 的 sqlite 文档。

RESERVED 锁表示进程打算在未来某个时间点写入数据库。一次只有一个进程可以持有保留锁

尝试在写入后关闭 sqlite 数据库,因为您的脚本可能会在每次运行时尝试重新打开已经打开的 sqlite 文件。

【讨论】:

  • 感谢这些精确度。但我仍然不明白为什么在我的代码中为什么数据库被锁定......我只是制作了一个基本的新 PDO 对象,它在本地服务器上,所以没有人使用它,我不使用“sqlite 浏览器”或其他打开它....
  • 因为下一次 php 轮胎打开 sqlite db 它不能因为它已经打开了。您必须在脚本末尾关闭 sqlite db 文件。 stackoverflow.com/questions/18277233/pdo-closing-connection
猜你喜欢
  • 2014-10-29
  • 2016-06-27
  • 2012-10-24
  • 1970-01-01
  • 2012-10-25
  • 2014-12-31
  • 2021-09-03
  • 2019-04-13
相关资源
最近更新 更多