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

标签 php mysql csv

我找了又找,但几乎一无所获。我有一个 CSV 文件,我正在通过 php 脚本插入到 mysql 数据库中。尝试了许多不同的东西但无法使其正常工作。 CSV 字段被发送给我们,其中有一列格式为 currancy,尝试将其附加到带有 VARCHAR、INT、Decimal (10,2)、Float 的 mysql 表,几乎只是在列表中。它加载到表中并在使用 php substr($val,1) 摆脱 '$' 后正确显示在 VARCHAR 中,但使用 number_format($sum, 2,'.',',') 计算它;结果完全错误,比如 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>";
     }

最佳答案

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

 ////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,现在效果很好。

关于php - 使用 currancy 格式的字段将 CSV 导入 MYSQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39278591/

相关文章:

php - 使用 PHP 将 CSV 转换为 JSON

python - python 将 TXT 转换为 CSV

php - 如何处理三个以上的 PHP GET 变量以从 MySQL 数据库中选择数据

php - 在 php 和 javascript 中重新获取请求

javascript - 将图像(来自 javascript)保存在公共(public)文件夹中(通过 php)

mysql - 在Sequel模型中指定外键

mysql - 表左连接的组合到mysql中的内部连接

php - Laravel 如何使用 json_decode 转换模型和集合?

java - 执行 SQL UPDATE 语句后刷新 JTable

php - 为 mysql 转换 html - 如何处理 <br/>s?