我的硬盘 (file.db) 上有一个包含 5 个表的 sqlite3 数据库。 我想将其中 3 个表复制到内存数据库 (:memory:)。
是否有使用 PHP5 的 PDO 格式的简单方法?
最佳答案
不是特定于 pdo 的解决方案,在您的情况下可能足够也可能不够:
编辑:一个例子
首先存储在 mydb.sq3 中的示例数据库
<?php
$pdo = new PDO('sqlite:mydb.sq3');
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$pdo->exec('CREATE TABLE foo(x INTEGER PRIMARY KEY ASC, y, z)');
$stmt = $pdo->prepare("INSERT INTO foo (x,y,z) VALUES (:x,:y,:z)");
$stmt->bindParam(':x', $x);
$stmt->bindParam(':y', $y);
$stmt->bindParam(':z', $z);
for($x=0; $x<100; $x++) {
$y = $x*2;
$z = $x*2+1;
$stmt->execute();
}
现在我们有一个 :memory: 数据库并且想要传输表 foo
<?php
$pdo = new PDO('sqlite::memory:');
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$pdo->exec('ATTACH "mydb.sq3" as filedb');
$pdo->exec('CREATE TABLE bar AS SELECT * FROM filedb.foo');
$pdo->exec('DETACH filedb');
完成。但是让我们看一下 sqlite_master 表
foreach($pdo->query('SELECT sql FROM sqlite_master') as $row) {
echo $row['sql'];
}
这打印
CREATE TABLE bar(x INT,y,z)
INTEGER PRIMARY KEY ASC 声明丢失。虽然可能就足够了......
关于PHP/SQLite - 将表从磁盘复制到内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1157996/