![](/img/trans.png)
[英]Trouble inserting data from csv into mysql database with unknown number of columns
[英]searching csv columns and inserting into mysql
我正在开发一个cron作业,该作业读取一个配置文件,该配置文件具有json格式的一些配置,并且我还有一个csv文件,必须从中将数据插入mysql tanble
我已完成其第一部分,即读取配置文件和读取csv文件
现在的问题是我必须在csv中搜索配置文件中的mysql列,然后如果在csv中找到匹配的列,则必须将该列中的值插入到mysql表中。
我被这部分困住了,需要一些帮助来完成此过程。
这是示例配置文件,我必须在csv中搜索源并将其放入csv的目标列中。
"matchingField": [
{
"source": "ProductLongDescription",
"detination": "Description"
},
{
"source": "ExtraTextOne",
"detination": "EventDate"
},
{
"source": "ExtraTextTwo",
"detination": "EventTime"
},
{
"source": "ExtraTextThree",
"detination": "LocationInfo"
},
{
"source": "Zupid",
"detination": "Unique_ID"
},
{
"source": "ProductName",
"detination": "Title"
},
{
"source": "ProductPrice",
"detination": "Price"
},
{
"source": "MerchantProductCategory",
"detination": "Category"
},
{
"source": "ImageMediumURL",
"detination": "ExternalImageUrl"
},
{
"source": "ProductManufacturerBrand",
"detination": "LocationName"
},
{
"source": "ZanoxProductLink",
"detination": "RedirectLink"
},
{
"source": "TermsOfContract",
"detination": "sittingType"
}
]
我自己找到了解决方案:)。 首先为源列和目标列创建两个数组,然后为csv标头列创建一个数组,然后在源数组中搜索标头列的值,如果找到匹配项,则创建一个包含目标列名及其对应值的查询(来自csv) 。 可能我无法很好地解释代码,但这解决了我的问题。
while ( ($data = fgetcsv($handle, 10000, $columnDelimiter) ) !== FALSE )
{
$number_of_fields = count($data);
if ($current_row == 1)
{
//Header line
for ($c=0; $c < $number_of_fields; $c++)
{
$header_array[$c] = $data[$c];
}
}
else
{
//Data line
$sql_str = '';
for ($c=0; $c < $number_of_fields; $c++)
{
if($key = array_search($header_array[$c],$source_arr)){
$sql_str .= $dest_arr[$key]." = '".$data[$c]."',";
}
}
$sql_str = "INSERT INTO $destinationTable SET ".trim($sql_str,',');
mysql_query($sql_str);
}
$current_row++;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.