不是特定于 pdo 的解决方案,对于您的情况可能足够也可能不够:
- 创建一个:内存:数据库
-
Attach现有数据库文件
- 创建表 ... AS SELECT * FROM ...
-
Detach数据库文件
编辑:一个例子
首先是存储在 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 声明丢失。不过可能就足够了......