Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/258.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在PHP PDO中将CSV数据插入SQLite——有没有比逐行插入更快的方法?_Php_Sqlite_Insert_Pdo_Bulk - Fatal编程技术网

在PHP PDO中将CSV数据插入SQLite——有没有比逐行插入更快的方法?

在PHP PDO中将CSV数据插入SQLite——有没有比逐行插入更快的方法?,php,sqlite,insert,pdo,bulk,Php,Sqlite,Insert,Pdo,Bulk,我正在寻找将CSV数据插入远程服务器上的SQLite数据库的有效方法 我必须使用PHP。我使用SQLite3,所以我必须使用PDO(sqlite_查询将不起作用) CSV位于服务器端,它有100000多行(50MB+文件大小) 问题:有没有比这更快的PHP方法? for (/* each row, 100.000 rows */) { $a = 'something'; $b = 'something'; $query = $link->prepare("INSER

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

我必须使用PHP。我使用SQLite3,所以我必须使用PDO(sqlite_查询将不起作用)

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一起使用(我应该使用
准备
吗?文件路径应该是什么样子?)


我是PDO和SQLite的新手。

我不知道是否有一种通过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();
}
这会将写操作保持到循环结束后,速度会快得多。 您需要像这样创建db对象: $link=newpdo('sqlite:your.db')


编辑:打字/粘贴更正

先读后写。有什么问题?可能是@KingCrunch的重复,而不是重复。。如果您需要过滤无效值怎么办???您提供的链接只能用于受信任的用户values@Baba这会有所不同,但问题不包含“过滤器”,它包含“将CSV插入SQLite数据库”。此外,OP还提到了
.import
本人。如果你是对的,OP应该澄清他的问题,否则就是重复:)对。那么阵列呢?我有这样的数组:$data[$row][$cell]。我可以绑定数组元素吗?我指的是动态行索引。我在C#和MSSQL中绑定数组元素时遇到问题,我在这里没有使用数组。我不知道你的意思。另外,值得注意的是,这可能不会在其他DB系统上产生相同的加速-事实上,恰恰相反,因为DBMS必须保持更高的隔离级别,并获取锁或维护数据的临时版本。
$link->beginTransaction();

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

$link->commit();