0

我正在使用下面的 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));
}

} 
4

1 回答 1

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 将会很有用。

于 2013-01-14T12:10:44.310 回答