2013-01-04 138 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。

相關問題