使用currancy格式字段将CSV导入MYSQL

时间:2016-09-01 18:30:32

标签: php mysql csv

我进行了搜索和搜索,但几乎找不到任何东西。我有一个CSV文件,我通过php脚本插入到mysql数据库中。试过很多不同的东西却无法让它正常工作。 CSV字段通过格式为currancy的列发送给我们,尝试将其附加到带有VARCHAR,INT,Decimal(10,2),Float的mysql表中,几乎就在列表中。在使用php substr($ val,1)删除' $'之后加载到表中并在VARCHAR中正确显示,但是使用number_format计算它($ sum,2,&# 39;''&#39);出现完全错误,比如$ 1,200.00,应该是$ 3,456,789.00 如果我在导入之前手动将CSV列的格式更改为TEXT,它可以正常工作,但这必须是自动化的。

有关将形成currancy的CSV导入mysql以进行计算的任何建议吗?有没有办法在使用php导入时更改CSV格式?

 $file = "ftp:1.1.1.1/myfile.csv"; 
if(($handle = fopen($file, "r")) !== FALSE)
{ fgetcsv($handle);
    while (($data = fgetcsv($handle, 1000, ",")) !== FALSE)
    {
        $num = count($data);
    for ($c=0; $c < $num; $c++) {
      $col[$c] = $data[$c];
    }
 $col13a = $col[27];
        $col13 = substr($col13a, 1);
     $col13 = substr($col13a, 1);
    $query = "INSERT IGNORE INTO allinv (cost) VALUES ('".$col13."')";


    $s= mysqli_query($dbConnected, $query); 
}

    fclose($handle);
}////upload script

 ////calculation & display script:
 $sum=0;

    while($row = fetch_array($result)){
        $date2= strtotime($row['DateIn']);
        $day = ($date-$date2)/86400;
        $value = $row['Cost'];
        $sum += $value;

    echo "<tr>";
    echo "<td>".$row['VIN']."</td>";
    echo "<td>".$row['Make']."</td>" ;
    echo "<td>".$row['Model']."</td>";
    echo "<td>".$row['Year']."</td>";
    echo "<td>".$row['Color']."</td>";
    echo "<td>".number_format($day)."</td>";
    echo "<td>".$row['Location']."</select></td>";
    echo "<td>".$row['Locationoutside']."</td>";
    echo "<td>".'$'.$row['Cost']."</td>";


    }"</table>";


    echo "<table><tr>
    <th>Total Vehicles</th>
    <th>Sum of Cost</th></tr>";
    $english_format_number = number_format($sum, 2, '.', ',');
    $count= mysqli_num_rows($result);
    echo "<td>".$count."</td>";
    echo "<td> $ ".$english_format_number."</td>";
    "</table>";
     }

1 个答案:

答案 0 :(得分:0)

所以我想通了,没有必要使用任何其他程序。 而不是:

 ////calculation & display script:
  $sum=0;

while($row = fetch_array($result)){
    $date2= strtotime($row['DateIn']);
    $day = ($date-$date2)/86400;
    $value = $row['Cost'];
    $sum += $value;

我把它更改为:

     $sum = 0;

    while($row = fetch_array($result)){
        $date2= strtotime($row['DateIn']);
        $day = ($date-$date2)/86400;
        $value = $row['Cost'];
        $calc = floatval(str_replace('', '', str_replace(',', '', $value)));
        $sum += $calc;

由于它是VARCHAR,因此只添加了前两个数字,逗号正在停止它并将其移动到下一行。删除了逗号,添加了floatvar,现在效果很好。