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

使用php附加无限的sqlite数据库,php,sqlite,pdo,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-&

一个设备每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附加有一个限制,默认情况下是10,并且只能根据需要增加到125


如何连接数千个数据库?如果我的方法是错误的,那么解决这个问题的最佳方法是什么?

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

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


如果这是不可能的,无论如何都要这样做,创建一个临时数据库并逐个复制数据。

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

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


如果这是不可能的,无论如何都要这样做,创建一个临时数据库并逐个复制数据。

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

只需将每个新数据库作为新的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 
等等


就这么简单。

只需将每个新数据库作为新的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 
等等


就这么简单。

您不需要一次将它们全部连接起来,是吗?读取当前数据库后,只需将其分离。为什么不能为每个“数据库”打开一个新连接?您不需要同时连接所有数据库,是吗?读取当前数据库后,只需将其分离。为什么您不能为每个“数据库”打开一个新连接?您能看一下对我问题的评论吗?iainn提到使用detach。它能解决我的问题吗?这看起来很简单,创建临时数据库使我的工作加倍,我相信你能看看对我问题的评论吗?iainn提到使用detach。它能解决我的问题吗?看起来很简单,创建临时数据库让我的工作翻了一番,我相信