【问题标题】:PHP mysql INSERT causing blank first rowPHP mysql INSERT导致第一行空白
【发布时间】:2015-12-21 05:12:20
【问题描述】:

我似乎无法弄清楚,但我的代码插入了 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";
}

【问题讨论】:

  • 向我们展示一些示例数据
  • 当你看到这个 Sam 时,这个标签应该已经关闭了。 - @JayBlanchard
  • 您好,这是一个示例脚本,但与实际脚本相似,出于安全原因,我不得不删除那里的真实数据。我知道它存在 SQL 注入的风险,但计划是先构建它,让基础工作正常,然后采取安全措施。:)

标签: php mysql csv


【解决方案1】:

有几件事可能会导致这种情况。首先尝试删除 csv 文件中的标题行。接下来检查数据行是否不等于空白或空,然后再将其写入数据库。

<?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
}

【讨论】:

  • 为什么 OP 应该尝试这个?一个好的答案总是会解释做了什么(通过一个例子)以及为什么这样做,不仅是为了 OP,也是为了未来的访问者。
  • 我无法删除标题或第一行,我需要它来识别每一列。我的想法是问题出在 fgetcsv 中。我们只能在循环内调用 fgetcsv() 吗?在我的情况下,我首先调用 fgetcsv() 一次来获取标题,然后在循环中获取行。
  • Jay.. 你也没有帮助.. 坐在那里叫人出来是零帮助,所以除非你想帮助.. 把你的 cmets 留给你自己。我们都很感激。
  • @RyanChurchill 错了。他在帮忙。没有很好解释的答案对任何人都没有帮助。从长远来看,您显然确实同意 Jay,因为您确实编辑了更多信息。
  • 我认为这是一个寻求帮助来解决问题的地方......而不是让人们为你编写代码的地方。我最初的回应为如何实现这一目标指明了方向。后来我对其进行了编辑,以更好地说明我给出的指导,并表明我给出的方向是可行的。
【解决方案2】:

用这个发现发布并结束这个,以便其他遇到 fgetcsv 问题的人会得到这个提示。

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

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

我为检测错误所做的事情是我首先应该做的事情,那就是使用显示所有汽车名称的 echo vardump,最后一辆车被命名为“NULL”

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-18
    • 1970-01-01
    相关资源
    最近更新 更多