如何通过PHP在SQLite数据库上执行.dump


How do I perform a .dump on SQLite database through PHP?

我需要通过PHP从sqlite3数据库中获取命令行函数.dump的结果。具体来说,我使用的是Zend_Db。

是否可以通过数据库适配器调用.dump命令?如果没有,是否有比提取每个表模式、每行并编写自己的输出更简单的解决方案?

我试过简单地将.dump作为查询运行,但我遇到了一个常见的语法错误。

SQLite3.dump命令是命令shell的一部分,而不是数据库库本身的一部分。

请参阅SQLite 的命令行外壳页面上的sqlite3特殊命令部分

唯一可以做到这一点的方法是通过PHP exec()

我发布了一个代码片段,因为我想做到这一点,但没有人发布预制解决方案:https://www.ephestione.it/dump-sqlite-database-to-sql-with-php-alone/

<?php
$db = new SQLite3(dirname(__FILE__)."/your/db.sqlite");
$db->busyTimeout(5000);
$sql="";
$tables=$db->query("SELECT name FROM sqlite_master WHERE type ='table' AND name NOT LIKE 'sqlite_%';");
while ($table=$tables->fetchArray(SQLITE3_NUM)) {
    $sql.=$db->querySingle("SELECT sql FROM sqlite_master WHERE name = '{$table[0]}'").";'n'n";
    $rows=$db->query("SELECT * FROM {$table[0]}");
    $sql.="INSERT INTO {$table[0]} (";
    $columns=$db->query("PRAGMA table_info({$table[0]})");
    $fieldnames=array();
    while ($column=$columns->fetchArray(SQLITE3_ASSOC)) {
        $fieldnames[]=$column["name"];
    }
    $sql.=implode(",",$fieldnames).") VALUES";
    while ($row=$rows->fetchArray(SQLITE3_ASSOC)) {
        foreach ($row as $k=>$v) {
            $row[$k]="'".SQLite3::escapeString($v)."'";
        }
        $sql.="'n(".implode(",",$row)."),";
    }
    $sql=rtrim($sql,",").";'n'n";
}
file_put_contents("sqlitedump.sql",$sql);