0

我正在寻找将 CSV 数据插入远程服务器上的 SQLite 数据库的有效方法。

我必须使用 PHP。我使用 SQLite3,所以我必须使用 PDO(sqlite_query 不起作用)。

CSV 在服务器端,它有 100000+ 行(50MB+ 文件大小)。

问题:有没有比这更快的 PHP 方法?

for (/* each row, 100.000 rows */)
{
    $a = 'something';
    $b = 'something';
    $query = $link->prepare("INSERT INTO user_info (a, b) VALUES (?, ?)");
    $query->bindParam(1, $a);
    $query->bindParam(2, $b);
    $query->execute();
}

我的 SQL 文件位于同一目录中。

我已经阅读了有关.import命令的信息,但我不知道如何将它与 PDO 一起使用(我应该使用prepare吗?文件路径应该是什么样子?)。

我是 PDO 和 SQLite 的新手。

4

2 回答 2

2
$link->beginTransaction();

$query = $link->prepare("INSERT INTO user_info (a, b) VALUES (?, ?)");
for (/* each row, 100.000 rows */)
{
//variable stuff + execute query
}

$link->commit();

这会将写入保持到循环之后 - 快得多。您需要像这样创建 db 对象: $link = new PDO('sqlite:your.db');

编辑:错字/粘贴更正

于 2013-04-19T07:13:45.733 回答
0

好吧,我不知道是否有可以通过 PDO 驱动程序使用的 SQLite 批量方法,但是您正在为每个循环重新准备相同的语句。

这可能会更有效:

$query = $link->prepare("INSERT INTO user_info (a, b) VALUES (?, ?)");
for (/* each row, 100.000 rows */)
{
    $a = 'something';
    $b = 'something';

    $query->bindParam(1, $a);
    $query->bindParam(2, $b);
    $query->execute();
}
于 2013-01-11T18:11:03.693 回答