PHP / SQLite - Копирование таблицы от диска до памяти

Это относится к лямбда-исчисление , который является формальной системой, которая просто имеет лямбда-выражения, которые представляют функцию, которая берет функцию для собственного аргумента и возвращает функцию. Все функции в лямбда-исчислении имеют тот тип, т.е. λ : λ → λ.

Lisp использовал понятие лямбды для именования его литералов анонимной функции. Эта лямбда представляет функцию, которая берет два аргумента, X и Y, и возвращает их продукт:

(lambda (x y) (* x y)) 

Это может быть применено встроенное как это (оценивает к 50 ):

((lambda (x y) (* x y)) 5 10)

9
задан 21 July 2009 в 08:43
поделиться

3 ответа

Решение, не относящееся к конкретному pdo, которое может или не может быть достаточным в вашем случае:

  • создать: memory: database
  • Присоединить существующий файл базы данных
  • СОЗДАТЬ ТАБЛИЦУ ... КАК ВЫБРАТЬ * ИЗ ...
  • Отключить файл базы данных

изменить: пример
Сначала пример базы данных, хранящейся в 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: database, и мы хотим передать таблицу 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 потеряно. Впрочем, может быть достаточно ....

12
ответ дан 4 December 2019 в 12:20
поделиться

Если это то, что вам нужно сделать, то я отвечу VolkerK, но я считаю, что должен указать, что вы собираетесь прочитать содержимое этих таблиц. в память каждый раз, когда вы запускаете этот код (каждый раз, когда эта страница загружается?), поэтому может быть лучше просто запросить файлы данных с диска.

4
ответ дан 4 December 2019 в 12:20
поделиться

Обратите внимание, что всегда можно использовать какой-либо механизм разделяемой памяти (например, APC, memcache и т. Д.), Чтобы сохранять базы данных sqlite в памяти постоянными между соединениями.

1
ответ дан 4 December 2019 в 12:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: