将csv文件插入SQL Server数据库表

时间:2013-01-04 23:31:09

标签: sql-server insert import-from-csv

我使用下面的PHP代码批量插入SQL Server中的数据库表。我已经有一个名为ShopifyItem的表(有25列)但是当我使用这个代码时我得到了

  

未定义的偏移: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 个答案:

答案 0 :(得分: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将会很有用。