php - 将 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,所以我的问题是:
在这种方法中,有时我会收到类似“插入值列表与列列表不匹配:1136 列计数与第 1 行的值计数不匹配”之类的错误,而实际上列数和值匹配或“类 PDOStatement 的对象不能转换为字符串"
有没有更好的方法在不知道列的情况下从 csv 获取数据?
解决方案
推荐阅读
- mysql - Hibernate,出现异常后不刷新Session的问题
- java - java.lang.SecurityException AWSCredentialsProvider 签名者信息不匹配
- android - 如何选择图像的自定义形状区域?
- r - 构建R plotly跟踪循环时如何调整组
- mysql - 如何只显示从未上过课的人的数据
- api - 使用 Google Sheets API,当我输入数据时,不支持添加和更新列格式
- vb.net - 我需要做什么来更正“无法创建 ActiveX 组件”。创建 Active Directory 对象时?
- php - 我无法在 laravel 模态窗口中提交表单
- python - 使用 OpenCV 检测 .pdf 表单图像中的水平空白行
- javascript - 如何使用 sequelize 将空数组转换为空 JSON 对象?