【问题标题】:Sqlite3 PHP "database disk image is malformed"Sqlite3 PHP“数据库磁盘映像格式错误”
【发布时间】:2014-01-02 16:58:54
【问题描述】:

我有一个绝对没有损坏的 sqlite db 文件,因为我可以使用 SQLiteStudio 打开它。 但是,当我尝试使用 PHP 动态打开它时,我在一些教程中找到了以下代码:

class MyDB extends SQLite3
{
  function __construct()
  {
     $this->open('../testDB');
  }
}
   $db = new MyDB();
   if(!$db){
      echo $db->lastErrorMsg();
   } else {
      echo "Opened database successfully\n";
   }

$sql ="SELECT * from testTable";

$ret = $db->query($sql);
while($row = $ret->fetchArray(SQLITE3_ASSOC) )
{
   echo "ID = ". $row['id'] . "\n";
   echo "NAME = ". $row['name'] ."\n\n";
}
echo "Operation done successfully\n";
$db->close();

我得到以下结果:

Opened database successfully 
Warning: SQLite3::query() [sqlite3.query]: Unable to prepare statement: 11, database     disk image is malformed in test.php on line 52

Fatal error: Call to a member function fetchArray() on a non-object in     test.php on line 53

我发现了一些类似的主题,但没有一个有明确的答案。 有人可以帮我吗?提前致谢!

【问题讨论】:

  • 您确定../testDB 是正确的路径吗?
  • 如果它是文件的正确路径,您确定该文件是 SQLite 数据库吗? (另外,检查一下它不是 SQLite v2 数据库。)
  • 是的,这就是路径(当我更改路径时,它会给出不同的错误,因为它没有找到文件),是的,它是 SQLite v3,因为 SQLiteStudio 以这种格式读取它.
  • 也许 PHP 使用了一些较旧的 SQLite3 版本? SQLite3 系列中有几个与格式相关的更改。检查: SELECT sqlite_version();在 PHP 和 SQLiteStudio 中。

标签: php sqlite


【解决方案1】:

我遇到了同样的“数据库磁盘映像格式错误”错误,我使用 SQLiteStudio 解决了它。 由于您已经拥有它,请打开文件,右键单击数据库并尝试“真空”选项。完成此操作后,尝试完整性检查。如果结果是“OK”,那么您的问题就解决了。至少我是这样解决的。 Vacuum 重建整个数据库。

【讨论】:

    【解决方案2】:

    小型 SQLITE db 我已经遇到了同样的问题。

    尝试使用:

    $sql = "VACUUM";

    【讨论】:

    • 欢迎来到 Stackoverflow。您是否介意将答案再扩展一点,让其他程序员了解这如何帮助解决问题!
    猜你喜欢
    • 1970-01-01
    • 2011-07-13
    • 2014-05-02
    • 1970-01-01
    • 2015-02-11
    • 1970-01-01
    • 2013-03-03
    • 1970-01-01
    相关资源
    最近更新 更多