PHP mysql INSERT导致第一行空白

时间:2015-09-23 18:42:58

标签: php mysql csv

我似乎无法解决这个问题,但我的代码插入了1个空白行(第1行)。空白行有空白车名,空车品牌,车价只有“0.00”。此代码用于上载csv文件并从该csv文件获取数据并插入数据库。第一行是列标题,我假设$GetHeaders = fgetcsv($file);的第一次调用是针对标题的。

$file = fopen($_FILES['fileupload']['tmp_name'],"r");

$GetHeaders = fgetcsv($file);
$CarName = array_search('Car Name', $GetHeaders);
$CarBrand = array_search('Car Brand', $GetHeaders);
$CarPrice = array_search('Car Price', $GetHeaders);

$theQue = "";
while(! feof($file))
{
    $GetHeaders = fgetcsv($file);
    $theQue .= "INSERT INTO cardb (CarName, CarBrand, Carprice) VALUES ('$GetHeaders[$CarName]', '$GetHeaders[$CarBrand]', '$GetHeaders[$CarPrice]')";
}

fclose($file);

if (mysqli_multi_query($connection, $theQue))
{
   echo "Success";
}

2 个答案:

答案 0 :(得分:0)

有几件事可能导致这种情况。首先尝试删除csv文件中的标题行。接下来在将数据写入数据库之前检查数据行是否等于空或null。

<?php 
//open the csv file for reading  
$jhandle = fopen($file_path, 'r');  
$row_limit=1000;                
while (($jdata = fgetcsv($jhandle, $row_limit, ",")) !== FALSE) {
$car_name = $jdata[0];  
$car_brand = $jdata[1]; 
$car_price = $jdata[2]; 
If(($car_name != '')||($car_brand != '')||($car_price > 0)){
//write to your database here.
}
//close your while statement
}

答案 1 :(得分:0)

使用此调查结果发布和结束此处,以便遇到fgetcsv问题的其他人将获得此提示。

这很奇怪,但经过几次测试后,我发现fgetcsv正在读取CSV文件中的每一行,但fgetcsv还有一行正在读取,这是一个NULL。

好像有一条看不见的行,它就是最后一排。它只显示在数据库中的第一行可能是因为自动排序或其他东西,但它再次fgetcsv得到的最后一行是NULL。我以为它应该检测到NULL作为EOF?

我做了什么来检测这个bug是我应该首先做的事情,即使用echo vardump显示所有车名,最后一辆车被命名为“NULL”

谢谢你的帮助,你们每个人都给了我一些想法让我找到了这个刺lol