PHP/SQLite - 将表从磁盘复制到内存

标签 php sqlite

我的硬盘 (file.db) 上有一个包含 5 个表的 sqlite3 数据库。 我想将其中 3 个表复制到内存数据库 (:memory:)。

是否有使用 PHP5 的 PDO 格式的简单方法?

最佳答案

不是特定于 pdo 的解决方案,在您的情况下可能足够也可能不够:

  • 创建一个 :memory: 数据库
  • Attach现有的数据库文件
  • CREATE TABLE ... 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 声明丢失。虽然可能就足够了......

关于PHP/SQLite - 将表从磁盘复制到内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1157996/

相关文章:

php - 向 Android 用户显示来自 MySQL 的信息 EXACLY ONCE

php - jQuery 提交前确认

c++ - C++ 中椭圆的参数

sqlite - 如何随机删除 SQLite 表中 20% 的行

java - SQLite 'No such table error'

javascript - Node +Jade+Express+Sqlite : How can I add a MiniMap to a Leaflet Map?

php - strtolower 因阿拉伯字符而失败

PHP DateTime createFromFormat不会自然消亡

php - 通过 iTunes 联盟计划链接到特定轨道

sqlite - 如何将记录从CSV文件追加到Sqlite表?