首页 > 解决方案 > 将 CSV 文件中的数据插入数据库

问题描述

我有一个函数应该从 csv 文件中获取数据并将其发送到数据库。

在stackoverflow中的大多数答案中,我已经看到在导入csv时这些列是已知的,但我希望能够上传任何csv文件并将其传递到我的数据库。

现在到目前为止我有下面的功能

 function loadData($fileName)
{

    $handle = fopen($fileName , "r");
    $csvcontent = fgetcsv($handle);


        while($csvcontent = fgetcsv($handle)) {

            for ($i = 0; $i < count($csvcontent); $i++) {
                $row = array_slice($csvcontent , $i , $i + count($csvcontent)); // get the row by slicing the csv array to the number of items in it

                $i += count($csvcontent);
                $queryArr = implode("','" , $row );

                $allcols = $this->showColumns('addresses');
                $querycol = implode("','" , $allcols);
                $query = "INSERT INTO addresses ('$querycol') VALUES ('$queryArr') ";
                $stmt = $this->pdo->prepare($query);
                
                $stmt->execute();
                $stmt = null;


        }
        }
    }

我正在获取 csv 中的行,我将其内爆并尝试在查询中使用它。所以如果我有一张像下面这样的桌子: 在此处输入图像描述

内爆会给我 1','reza','red ,通过将它放在查询中的 ' ' 中,我希望通过开始和结束冒号来解决问题。

现在我认为这不是一个好方法,但我仍在学习 PHP,所以我的问题是:

  1. 在这种方法中,有时我会收到类似“插入值列表与列列表不匹配:1136 列计数与第 1 行的值计数不匹配”之类的错误,而实际上列数和值匹配或“类 PDOStatement 的对象不能转换为字符串"

  2. 有没有更好的方法在不知道列的情况下从 csv 获取数据?

标签: phpmysqlcsvinsertimport-csv

解决方案


推荐阅读