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

时间:2011-06-03 00:19:35

标签: php sqlite

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

是否可以通过数据库适配器调用.dump命令?如果没有,是否有解决办法,比拉动每个表架构,每行和编写自己的输出更简单?

我试过简单地运行.dump作为查询,但是我得到了一般语法错误。

2 个答案:

答案 0 :(得分:2)

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

请参阅页面Command Line Shell For SQLite sqlite3的特殊命令部分

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

答案 1 :(得分:-1)

我发布了一个代码段,因为我想做到这一点,而且没人发布过预制的解决方案: 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);