我需要从sqlite3数据库中获取命令行函数.dump的结果,但需要通过PHP。具体来说,我使用的是Zend_Db。
是否可以通过数据库适配器调用.dump命令?如果没有,是否有解决办法,比拉动每个表架构,每行和编写自己的输出更简单?
我试过简单地运行.dump作为查询,但是我得到了一般语法错误。
答案 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);