打开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-qlite3这样的命令不起作用
有时在将php脚本从一个宿主移动到另一个宿主时会出现此错误。最常见的是sqlite WAL:模式中的错误
PRAGMA journal_mode = WAL;
若要解决此问题,您需要在数据库中禁用此选项。最简单的方法是将文件数据库''x02''x02到''x01''x01中的2个字节替换为地址''x12(dec 18(在bash中,您可以使用以下命令:
do printf ''x01'x01' | dd of=basename.db bs=1 seek=18 count=2 conv=notrunc