在PHP PDO中将CSV数据插入SQLite——有没有比逐行插入更快的方法?
我正在寻找将CSV数据插入远程服务器上的SQLite数据库的有效方法 我必须使用PHP。我使用SQLite3,所以我必须使用PDO(sqlite_查询将不起作用) CSV位于服务器端,它有100000多行(50MB+文件大小) 问题:有没有比这更快的PHP方法?在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
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();