使用PHP读取csv文件时如何解决未定义的偏移量?

时间:2012-07-28 03:59:58

标签: php mysql csv

向所有善良的人致以最诚挚的帮助。 我需要使用php将csv文件导入mysql。 我到目前为止的代码如下:

步骤:     进行所有相应的验证。     建立一个mysql连接。

 //process the csv file
   $handle = fopen($_FILES['file']['tmp_name'], "r");
   while (($data = fgetcsv($handle, 1000, ";")) !== FALSE) {
    $att0 = mysql_real_escape_string($data[1]);
    $att1 = mysql_real_escape_string($data[1]);
    $att2 = mysql_real_escape_string($data[2]);
        etc, etc.
   $sql = "INSERT INTO Alumnos etc, etc.";
   mysql_query($sql);

错误:    注意:未定义的偏移量:第58行的D:\ www \ studentAdministrator \ imports \ importar1.php中的1

我会感激任何帮助。提前谢谢。

我解决了我的问题。我用逗号更改了分号 我很感谢已经发布的答案

2 个答案:

答案 0 :(得分:1)

在传递变量之前检查它们并像这样使用:

if(isset($data[1]))? $att0 = mysql_real_escape_string($data[1]) : $att0='null';

您可以将其设置为您喜欢的任何内容,只是认为您可以通过这种方式看到NULL很简单。

如果你知道CSV文件会丢失列,但总是按正确的顺序排列(在这种情况下可能不是一个很好的例子,但值得一提)你也可以这样做:

for($i=0;$i<count($data);$i++)
{
    echo 'Value '.$i.' is: '.$data[$i].'\n';
}

这将解析每行中的许多项目,您可以使用它们而不必担心数字。同样,在您的场景中,可能不是最好的,但值得一提。

答案 1 :(得分:1)

正如我在评论中所说,这可能是由于导出一条末尾有空白单元格的行。一些实用程序将在最后一个单元格之后结束该行,而不是放入适当数量的分隔符。检查您的文件,如果这是问题,您可以在脚本中添加一些逻辑来处理它 - 在尝试使用之前检查每个索引的isset(),如果它不存在,替换空字符串(或null,或者用于文件中其他位置的空单元格)。