向所有善良的人致以最诚挚的帮助。 我需要使用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
我会感激任何帮助。提前谢谢。
我解决了我的问题。我用逗号更改了分号 我很感谢已经发布的答案
答案 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,或者用于文件中其他位置的空单元格)。