打开sqlite文件时遇到一些麻烦
在命令行中我得到了这个:
#sqlite3 sms.db
SQLite version 3.6.20
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite> select * from message;
Error: file is encrypted or is not a database
当我连接时,错误不是,当我运行查询时
检查文件让我这个
# file sms.db
sms.db: SQLite 3.x database
因此它不应该是版本问题 - 比如使用sqlite3打开sqlite2文件
在php中我有这个:
try
{
/*** connect to SQLite database ***/
$db = new PDO("sqlite:path/sms.db");
echo "Handle has been created ...... <br><br>";
}
catch(PDOException $e)
{
echo $e->getMessage();
echo "<br><br>Database -- NOT -- loaded successfully .. ";
die( "<br><br>Query Closed !!! $error");
}
$result = $db->query('SELECT * from message') or var_dump($db->errorInfo());
获取此信息(不是在连接时,而是在执行查询时)
array(3) { [0]=> string(5) "HY000" [1]=> int(26) [2]=> string(38) "file is encrypted or is not a database" }
我为firefox使用了一个Sql管理器扩展,在那里我可以毫无问题地打开文件(并运行任何查询而无需任何加密或密码)。这对我来说真的很奇怪。我在最后几个小时搜索了这个,但我找不到任何解决方案。任何帮助,将不胜感激。
我刚刚在Windows上测试过,我可以打开数据库。我认为这个问题与sqlite驱动程序有关。
在Windows上我有SQLite Library 3.7.7.1 在我的centos服务器上,我有SQLite Library 3.6.20
现在的问题是如何更新php sqlite扩展。我无法更新整个php(可能会导致错误)
像yum install php-pdo,yum install php5-sqlite3这样的命令,不起作用
答案 0 :(得分:1)
有时我将php脚本从一个托管移动到另一个托管时会出现此错误。 最常见的是sqlite WAL模式中的bug:
PRAGMA journal_mode = WAL;
要解决此问题,您需要在数据库中禁用此选项。 最简单的方法是将文件database \ x02 \ x02中的2个字节替换为\ x01 \ x01到地址\ x12(dec 18) 在bash中,您可以使用命令:
do printf '\x01\x01' | dd of=basename.db bs=1 seek=18 count=2 conv=notrunc