我使用下面的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));
}
}
答案 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将会很有用。