错误:文件已加密或不是数据库

Ver*_*tex 34 php sqlite

我用PHP创建了一个带表的数据库.我是通过以下方式完成的:

<?php
$db = new SQLiteDatabase("test.db");
unset($db);
$db = sqlite_open("test.db");
sqlite_query($db,"create table students (names char(255))");
sqlite_close($db);
?>
Run Code Online (Sandbox Code Playgroud)

从命令行执行我的PHP文件后:"php test.php"我在我的目录中得到一个名为"test.db"的新文件(这就是我想要的).在命令行中,我键入"sqlite3 test.db".这样我就进入了sqlite命令行会话.然后,使用sqlite3,我输入".tables"(我想检查新数据库是否包含它应该包含的表).结果我得到:

Error: file is encrypted or is not a database 
Run Code Online (Sandbox Code Playgroud)

所以,它不起作用.有人知道这个问题吗?预先感谢您的任何帮助.

小智 46

这是版本不匹配问题.

要使用PHP5和SQLite打开一个数据库,我们需要使用PDO和没有sqlite_open()功能.如何打开或创建数据库的示例:

try 
{
    /*** connect to SQLite database ***/

    $dbh = new PDO("sqlite:VPN0.sqlite");
    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");
}

echo "Database loaded successfully ....";
Run Code Online (Sandbox Code Playgroud)


Ted*_* Xu 14

我遇到了同样的问题,使用pdo而不是sqlite_open()

这个链接非常有用,这是我的代码片段,完美运行,希望它有所帮助

$dir = 'sqlite:YourPath/DBName.db';
$dbh  = new PDO($dir) or die("cannot open the database");
$query =  "SELECT * from dummy_table";
foreach ($dbh->query($query) as $row)
{
    echo $row[0];
}
Run Code Online (Sandbox Code Playgroud)


小智 9

这很可能是php sqlite版本和你的独立sqlite可执行文件之间的版本不匹配.

请参阅:http://us3.php.net/manual/en/book.sqlite.php - 来自Andrew Paul Dickey的"用户贡献笔记".

为了快速解决方案,您可以安装和使用sqlite2独立可执行文件.