首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP CSV导入问题

PHP CSV导入问题
EN

Stack Overflow用户
提问于 2013-01-25 00:56:38
回答 1查看 258关注 0票数 1

我正在将CSV文件导入数据库,这是一个多步骤的过程。

以下是几个步骤:

  • 步骤1:用户上传CSV文件。
  • 步骤2:用户将数据与数据类型关联。例如,如果CSV中的记录包含以下数据:John,Doe,jondoe@gmailcom,用户将从下拉框中选择firstname与数据值John相关联,从与数据值Doe关联的下拉框中选择lastname,从与数据值johndoe@gmail.com关联的下拉框中选择emailaddress
  • 步骤3:将数据插入数据库

我的问题如下:

1./在步骤3中,我将拥有用户选择的列和原始数据。

原始数据如下所示:

代码语言:javascript
复制
$data = array(
 0 => array('John','Doe','johndoe@gmail.com'),
 1 => array('Foo','Bar','foobar@gmail.com')
);

下面是从步骤2中选择的列:

代码语言:javascript
复制
$columns = array('firstname','lastname','emailaddress')

如何创建可以如下所示的sql查询:

INSERT into contacts (id,firstname,lastname,emailaddress) values (null,'John','Doe','johndoe@gmailcom')

如您所见,sql查询按照列在数组中的顺序选择列,然后选择值。我当时认为,由于列是按照数据的顺序选择的,所以我可以假设数据的顺序是正确的,并与该位置的特定列相关联(例如,我可以假设数据值'John‘与列数组的第一个位置相关联,反之亦然)。

2./我正在考虑一种可能的情况,即当用户完成文件的初始上传时,他们可能会发送一个csv文件,其中的第一个记录有一个空白字段。问题是,我根据csv记录中的列数确定要让用户关联到数据的列数。在本例中,我们有2列,随后的每条记录都有3列。好吧,我不打算循环整组记录来确定正确的列数。我如何解决这个问题?有什么想法吗?

编辑

我想我知道了问题2的答案。在csv文件的解析中,我可以得到每个记录的计数,解析结束时最高的计数是我的计数。似乎是对的?有什么问题吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-01-25 01:08:33

要解析CSV文件中的数据,请查看fgetcsv。http://php.net/manual/en/function.fgetcsv.php

它将从文件中加载一行,并返回CSV字段的数组。

代码语言:javascript
复制
$data = array();
while (($lineFields = fgetcsv($handle)) !== false) {
    $data[] = $lineFields;
}

这假设您使用的是PHP5,并使用$handle打开文件。在PHP4中,fgetcsv需要第二个参数来读取最大行长。

对于查询:

代码语言:javascript
复制
$sql = "INSERT into contacts (id," + implode(',', $columns) + ") values";

我不包括价值之后的任何东西。您应该创建准备好的语句,以防止sql注入。另外,如果您正在使用MySQL,id应该是一个自动增量字段,并从插入中省略(让MySQL生成它)。如果使用Postgres,则需要为id字段创建序列。无论如何,让数据库为您生成id。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14513639

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档