2013-01-04 244 views
0

我正在使用下面的PHP代码将大容量插入SQL Server中的数据库表中。我已经有一台名为ShopifyItem(25列),但是当我使用此代码我将csv文件插入到SQL Server数据库表中

未定义抵消:24

错误消息,并且在Item表我只看到 (26行插入正确),即使csv文件在行中也有超过1,000个。

谁能告诉我什么是错的?

PHP代码:

$server = "**\**,1433"; 
$connectionInfo = array("Database"=>"**", "UID"=>"**", "PWD"=>"**"); 
$conn = sqlsrv_connect($server, $connectionInfo); 
if($conn === false) { 
    die(print_r(sqlsrv_errors(), true)); 
} 
$file_handle = fopen("Table.csv", "r"); 

while (!feof($file_handle)) { 

$line_of_text = fgetcsv($file_handle, 1024); 

$tsql = "INSERT INTO Item (Handle, Title, [Body(HTML)], Vendor, [Type], Tags, [Option1 Name],[Option1 Value], [Option2 Name], [Option2 Value], [Option3 Name], [Option3 Value], [Variant SKU], [Variant Grams], [Variant Inventory Tracker],[Variant Inventory Qty], [Variant Inventory Policy], [Variant Fulfillment Service], [Variant Price], [Variant Compare At Price], [Variant Requires Shipping], [Variant Taxable], [Image Src], HQID, WebPrice) 
     VALUES ('$line_of_text[0]','$line_of_text[1]', '$line_of_text[2]', '$line_of_text[3]', '$line_of_text[4]', '$line_of_text[5]', '$line_of_text[6]', '$line_of_text[7]', '$line_of_text[8]', '$line_of_text[9]', '$line_of_text[10]', '$line_of_text[11]', '$line_of_text[12]', '$line_of_text[13]', '$line_of_text[14]', '$line_of_text[15]', '$line_of_text[16]', '$line_of_text[17]', '$line_of_text[18]', '$line_of_text[19]', '$line_of_text[20]', '$line_of_text[21]', '$line_of_text[22]', '$line_of_text[23]', '$line_of_text[24]')"; 

if(sqlsrv_query($conn, $tsql)) 
{ 
     echo "Statement executed.\n"; 
} 
else 
{ 
     echo "Error in statement execution.\n"; 
     die(print_r(sqlsrv_errors(), true)); 
} 

} 
+1

我会得到正确的答案,这样我有12%的机会得到我的答案。 –

+0

你说得对,我的道歉。 – Max

+0

我不做PHP,所以我不确定你在这里做什么,但也许你的CSV文件中的数据有问题。 “26行正确插入”有什么问题?这是不对的? –

回答

0

如果有与您的CSV文件没有问题,可能的候选人是这一行:

$line_of_text = fgetcsv($file_handle, 1024); 

就会限制读取每行1024个字节的数据。如果这一行比这更长,它将被截断,并且可能会给你这个缺少元素的错误。你可以改变缓冲区的大小,这样,如果你知道最大线路长度:

$line_of_text = fgetcsv($file_handle, 2048); 

甚至尝试这样看,如果这是你的问题的原因:

$line_of_text = fgetcsv($file_handle); 

这会稍微慢一点,但不会限制你的线条长度。

如果这不起作用,那么它会很有用,如果你可以发布csv数据行20-30。

相关问题