【问题标题】:Sqlite3 dump database through PHPSqlite3 通过 PHP 转储数据库
【发布时间】:2014-03-05 12:24:02
【问题描述】:

我希望能够将整个 sqlite 数据库转储到文件 (database.sql) 中,以便将其用作备份。问题是 PHP 中的 exec() 似乎无法正确运行“.dump”命令,因为它只给出“COMMIT;”结果而不是全文:

$db = new SQLite3('checks_db.db');
$results=$db->exec('.dump');
$content=$results->fetchArray();

如果我从 sqlite3 运行它,它会同时提供模式和插入指令以及数据。 也许我还应该提到数据库有 777 权限。 谁能写一个php-sqlite3中'.dump'命令的语法示例?

【问题讨论】:

  • 显示您的exec() 命令。
  • PHP 脚本的名称为 $db = new SQLite3('checks_db.db'); $results=$db->exec('.dump'); $content=$results->fetchArray(); ,但我在 $contents 中一无所获。
  • 结果是什么($content)?
  • 我得到了这个答案:Warning: SQLite3::exec(): near ".": syntax error in C:\Documents and Settings\Filippos\wapache\htdocs\checks\save_db.php on line 4 Fatal error: Call to a member function fetchArray() on a non-object in C:\Documents and Settings\Filippos\wapache\htdocs\checks\save_db.php on line 5
  • 如果我在 ubuntu 中运行它,我只会得到 COMMIT;,这是我期望的数据的最后一行。

标签: php sqlite


【解决方案1】:

SQLite 数据库没有.dump 命令。

sqlite3 command-line shell 有一个.dump 命令。 为了能够使用它,您必须执行该工具;像这样:

exec('sqlite3 /some/where/checks_db.db .dump', $output);

进行备份的最简单方法是复制数据库文件本身,但使用 shell 的 .backup 命令会更安全。

【讨论】:

  • 所以没有办法生成这样的文件吗?我以为我可以通过插入命令在许多步骤中完成每一行结果等,但仍然存在创建表的问题 - 我相信 .schema 会像 .drop...
  • 有办法;就是执行sqlite3工具。
  • 是的,但我如何通过 PHP 做到这一点?
  • 您不应该复制数据库文件本身,至少不要在工作环境中(即运行网站)。这些副本不会是原子的。请阅读How To Corrupt An SQLite Database File 中的第 1.2 节。
  • @VincasDargis 请注意,这不会复制文件本身,它使用普通 API 访问数据库。
猜你喜欢
  • 2010-09-23
  • 1970-01-01
  • 2013-05-28
  • 2012-09-13
  • 2012-05-19
  • 2010-12-01
  • 2017-11-20
  • 2015-11-23
  • 2010-12-15
相关资源
最近更新 更多