PDO PHP SQLite3数据库连接一般错误14

 隐之王语录 发布于 2023-02-13 08:38

我有2个sqlite3.x数据库(来自iPhone),一个来自游戏应用程序,另一个是地址簿.

我在php conf中记录并显示错误'on'.

使用PHP/PDO我可以显示游戏数据库中的字段和值,包括我在结果页面中捕获的图像blob,并使用"img src ='data:...'进行渲染.我在其他字段上使用htmlentities抓住plist二进制blob之类的东西.

我正在使用perl脚本生成第一页,并使用对sqlite3的系统调用获取示例数据.该脚本正在通过作为cli参数提供的目录进行递归搜索.

我基本上从数据库中的每个表中获取第一条记录(作为数据样本),为用户提供他们想要进一步查询的字段的选项,并将这些选项传递给对目标表执行查询的表单处理程序,以及从所选列中获取数据.

但是...尝试连接到地址簿数据库时,我收到"无法打开数据库"的一般错误.

我已经检查了数据库权限,所有权,将它们放在同一个目录中,使它们完全向世界开放......我能想到的一切,仍然没有乐趣.

真正奇怪的是,我可以使用sqlite3从命令行中非常愉快地查询所有数据库,但在使用PDO时会出现此错误.

整个事情在以下方面绊倒:

($db and $strSQL vals passed from previous page)

$dbh = new PDO('sqlite:'.$db);
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);
$result = $dbh->query($strSQL);

即使我从表中选择一个简单的主键列,我也会收到错误,所以我很确定这不是数据处理问题.我甚至尝试过针对Firefox和Chrome数据库的相同脚本......没有任何问题.

非常感谢任何想法/指针/建议.这个是我的头!

干杯.

1 个回答
  • 好的...所以看起来尽管数据库文件本身是全开的(chmod 777),但它们所在的目录必须是可写的!仍然不确定命令行中的sqlite如何不需要可写目录,但你肯定需要它来进行PHP/PDO查询.

    未显示结果的数据库设置了预写日志(WAL)位(文件头的字节18和19),并且目录需要可写,因此SQLite可以创建正在查询的数据库的WAL版本.对于非WAL dbs,字节18和19设置为0x01和0x01,对于启用WAL的数据库,字节18和19设置为0x02 0x02.

    是什么让它离开?...当我重新运行查询时,突然出现了我的地址簿数据库文件的副本,其中"-wal"和"-shm"附加到文件名的末尾,并且恰好已将数据库移入一个可写的测试目录.

    去搞清楚!

    PS ..有趣的是,每次更改日志模式时(使用db查询"pragma journal_mode = [wal | off]"),字节94和95的2字节计数器递增1.在模式之间翻转时检查数据库的哈希值时注意到这一点,并且无法获得相同的2个哈希值.我在数据库之前和之后做了一个xxd,将输出传送到txt文件,然后对2个txt文件进行差异化......并且有这些计数器字节.

    2023-02-13 08:46 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有