【问题标题】:Cannot get fgetcsv file to work with MySQL database无法让 fgetcsv 文件与 MySQL 数据库一起使用
【发布时间】:2017-04-28 11:13:20
【问题描述】:

我已尝试将其设置为fgetcsv 函数,以将CSV 文件的所有行输出到我的数据库中。这似乎是相当标准的功能,但它仍然不起作用。

这是我要运行的代码:

<?php
$file = $_FILES['records_csv']['tmp_name'];
$handle = fopen($file,"r");

while(($csv = fgetcsv($handle,1000,",")) !== false) {
    $sql = "INSERT INTO records(artist, title, type, size, year, status)
    VALUES ('".$csv[0]."', '".$csv[1]."', '".$csv[2]."', '".$csv[3]."','".$csv[4]."','ACTIVE')"; 
}

if ($conn->query($sql) === TRUE) {
    echo "File uploaded successfully!";
} else {
    echo "Error: " . $sql . "<br>" . $conn->error;
}     

当我运行它时,它似乎只将文件的第二行输入到数据库中?不知道为什么会这样??

我的 CSV 文件如下所示:

The Jam,All Around The World,Single,7 inch,1977
The Jam,Strange Town,Single,7 inch,1979

我上传的表单如下所示:

<form method="post" class="AddCSV_form" enctype="multipart/form-data">
    <input type="file" name="records_csv">
    <input type="submit" name="csv_sub" value="Upload">
</form>

谢谢。

【问题讨论】:

  • 看看你的while() 循环,$sql 被设置的地方,然后看看你在query() 中使用$sql 的地方,你看到这个问题了吗?
  • 只是问题格式的一点,最好避免在问题中使用感谢和“请帮助”。它有助于在 SO 上保持良好和标准化。
  • @SingleEntity - 标准化?如果礼貌不是标准化的,那么我认为问题的格式非常糟糕。
  • @HarryHawkes - 你的意见是正确的,我也曾经把礼貌的 cmets 放进去,只是把它们删除了。就是这样。

标签: php html mysql csv fgetcsv


【解决方案1】:
$file = $_FILES['records_csv']['tmp_name'];
$handle = fopen($file,"r");
$values = array();
while(($csv = fgetcsv($handle,1000,",")) !== false)
{
   $values[] = "('".$csv[0]."', '".$csv[1].
               "', '".$csv[2]."','".$csv[3]."','".$csv[4]."','ACTIVE')"; 
}
$sql = "INSERT INTO records (artist, title, type, size, year, status) VALUES "
       . implode(',',$values); 

if ($conn->query($sql) === TRUE) {
   echo "File(s) uploaded successfully!";
} else {
   echo "Error: " . $sql . "<br>" . $conn->error;
} 

祝你愉快……

【讨论】:

    【解决方案2】:

    正如 JustOnUnderMillions 发现的那样,将代码更改为:

    $file = $_FILES['records_csv']['tmp_name'];
                        $handle = fopen($file,"r");
    
                        while(($csv = fgetcsv($handle,1000,",")) !== false)
                        {
                            $sql = "INSERT INTO records
                             (artist, title, type, size, year, status)
                            VALUES ('".$csv[0]."', '".$csv[1]."', '".$csv[2]."',
                            '".$csv[3]."','".$csv[4]."','ACTIVE')"; 
    
    if ($conn->query($sql) === TRUE) {
                            echo "File uploaded successfully!";
                        } else {
                            echo "Error: " . $sql . "<br>" . $conn->error;
                        } 
                        }
    

    【讨论】:

    • 谢谢@Biju P Dais 我从来没有这样想过:-)
    猜你喜欢
    • 1970-01-01
    • 2013-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-18
    相关资源
    最近更新 更多