使用php附加无限的sqlite数据库

时间:2016-09-07 08:44:19

标签: php sqlite pdo

一台设备每10分钟生成不同​​行的.db文件。所有的sqlite文件都有一个名为" wifi"。

的表

我正在编写一个php应用程序来读取所有文件中的所有数据。我正在使用ATTACH方法来组合数据库。像:

try {
$file_db = new PDO('sqlite::memory:');

$file_db->setAttribute(PDO::ATTR_ERRMODE,
                        PDO::ERRMODE_EXCEPTION);

$file_db->exec("ATTACH DATABASE 'wifi_16-09-02_09_44_06.db' AS db1");
//many more attached files here, like 1000 or 2000

$result = $file_db->query('SELECT * FROM db1.wifi UNION ALL SELECT * FROM db2.wifi, ...');

$file_db = null;
}
catch(PDOException $e) {
echo $e->getMessage();

错误:

  

SQLSTATE [HY000]:常规错误:1个附加数据库太多 -​​ 最多10个

在我编写此代码后,我发现sqlite attach有一个限制,默认情况下是10,并且只能根据this增加到125.

如何附加数千个数据库?如果我的方法错了,解决这个问题的最佳方法是什么?

3 个答案:

答案 0 :(得分:0)

拥有数千个数据库是错误的。

您应该将所有数据放入单个数据库中的单个表中。

如果无法做到这一点,无论如何都要这样做,创建一个临时数据库并逐个复制数据。

答案 1 :(得分:0)

有一些方法可以解决这个问题。例如,您可以更改编程方法,因此您不需要附加大量sqlite数据库。但是,为了通过这个限制,我认为您可以更改SQLite的编译选项,有关更多信息,请查看以下链接: http://www.sqlite.org/compile.html

答案 2 :(得分:0)

只需将每个新数据库打开为新的PDO实例。

$file_db = new PDO('sqlite::wifi_16-09-02_09_44_06.db');
$file_db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$result = $file_db->query('SELECT * FROM db1.wifi UNION ALL SELECT * FROM db2.wifi, ...');
// do whatever
$file_db = new PDO('sqlite::wifi_whatever.db');
$file_db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$result = $file_db->query('SELECT * FROM db1.wifi UNION ALL SELECT * FROM 

等等。

就这么简单。