【发布时间】:2020-11-14 03:40:48
【问题描述】:
我有一个以 UTF-8-BOM 编码的大型 csv 文件(超过 100,000 行),如下所示:
27336;00203-AND1;90-BLACK;9.5;2
27336;00203-ET1;90-BLACK;10;1
27336;00203-ET1;90-BLACK;12;1
...
我的 SQL Server 数据库中的一个表包含这些列:
storenumber | stylecode | colour | size | units | timestamp
我使用批量插入数据一次加载文件,但我想将我的 $timestamp 变量添加到插入到表中的每一行,但它不起作用......我该怎么做?
<?php
include("connexion.php");
ini_set('max_execution_time', 32400);
$timestamp= date("y-m-d H:i");
$csv= "D:/xampp/htdocs/retail_BI/files/BI2_20200720_1344_00076.txt";
$query = "BULK INSERT dbo.Y2_Inventory
FROM '$csv'
WITH (
FIELDTERMINATOR = ';',
ROWTERMINATOR = '\n',
ERRORFILE = 'myfileerror.log'
)";
$stmt = $conn->query( $query );
if (!$stmt) { echo $conn->error;}
$query2 = "UPDATE dbo.Y2_Inventory SET timestamp = ? WHERE timestamp IS NULL";
$stmt = $conn->query( $query2 );
echo "good";
?>
【问题讨论】:
-
你不能对
BULK INSERT进行参数化,你必须使用动态 SQL 并安全地注入值(你在这里没有做的事情)。 -
我想使用 BULK INSERT 因为否则处理我的文件需要几个小时...我可以提高插入速度吗? @Larnu
-
@Eric27 你对
LASTROW = '$timestamp'有什么期望?LASTROW只是指定要加载的最后一行的编号。您可以尝试在BULK INSERT之后执行和附加UPDATE。 -
但是如果我之后再做,他不会把我的 $timestamp 插入到我表格的每一行吗? @Zhorov
-
我假设在插入
timestamp列时是NULL,所以UPDATE .. SET timestamp = ? WHERE timestamp IS NULL应该可以工作。
标签: php sql-server csv pdo