繁体   English   中英

PDO PHP SQLite3数据库连接常规错误14

[英]PDO PHP SQLite3 database connection General Error 14

我有2个sqlite3.x数据库(来自iPhone),一个来自游戏应用程序,另一个是通讯录。

我在php conf中记录日志并显示错误“ on”。

使用PHP / PDO,我可以显示游戏数据库中的字段和值,包括我在结果页中捕获的图像斑点,并使用“ 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数据库使用相同的脚本...完全没有问题。

真的很感谢任何想法/指针/建议。 这是我的脑袋!

干杯。

OK ...所以看来,尽管事实上数据库文件本身是完全打开的(chmod 777),但它们所在的目录必须是可写的! 仍不确定不需要通过可写目录从命令行获得sqlite如何,但是对于PHP / PDO查询,您肯定需要它。

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

是什么让它消失了?...当我重新运行查询并碰巧将数据库移入数据库时​​,突然出现了地址簿数据库文件的副本,在文件名的末尾附加了“ -wal”和“ -shm”用于测试的可写目录。

去搞清楚!

PS ..有趣的是,每次更改日志模式(使用db查询“ pragma journal_mode = [wal | off]”)时,位于94和95字节的2字节计数器将递增1。 在模式之间进行切换时检查db的哈希值时,请注意这一点,并且无法获得相同的2个哈希值。 我在数据库之前和之后进行了xxd处理,将输出通过管道传输到txt文件,然后将2个txt文件进行比较...然后有这些计数器字节。

根据错误消息“无法打开数据库”,它无法访问sqlite文件。 我确定您已经检查了上一页中的“ $ db”变量。

很难给您一个明确的答案。 您是否可以在没有PDO的情况下尝试,仅检查sqlite文件或PHP代码是否存在问题。

发布结果,让我们看看。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM