首先,对于一些人来说这可能是一个愚蠢的问题,但由于我是这方面的新手,我在做事时仍在学习。所以这是我的问题:
我正在尝试将所有文件放在目录中,以便我可以将其内容插入到数据库中。我目前正在使用localhost。使用glob()功能,我得到了我需要的东西。但这是我遇到问题的地方。由于glob()函数返回文件名的arraylist,如何获取当前正在读取的文件名,并将其也插入数据库表中?
这是我当前使用此site获得的代码:
$dir = "MyFiles/";
$curFile = glob($dir."*.csv");
foreach ($curFile as $filename) {
$handle = fopen($filename,"r");
}
//loop through the file
do{
if ($data[0]) {
mysql_query (" INSERT INTO tblCoordinates (id,filename,lat,lon)
VALUES
('',
'.$filename.',
'".addslashes($data[0])."',
'".addslashes($data[1])."')
");
} while ($data = fgetcsv ($handle,1000,",","'"));
}
同样,我还需要将文件名插入到数据库中,但是使用我当前的代码,不会插入文件名。
答案 0 :(得分:2)
我认为你不应该使用这种方法。 每次运行脚本时,您可能(并且可能会)终止数据库(特别是如果此目录中有许多文件,并且每个csv文件中有许多行)。 准备一个事务,一个带有许多值的插入,然后提交似乎更好。 这样,您也可以轻松回显查询,看看是否一切正常。
请注意,您应该检查文件名是文件还是目录(我不确定。和..但您可能还需要检查它)
另外,我建议做一些像
这样的事情$someVar = glob($dir."*.csv");
foreach($someVar as $filename) {
// your code here
}
答案 1 :(得分:1)
刚注意到:
在你的陈述中'.$filename.'
是错误的。它应该是'$filename'
...
您应首先汇编sql命令,然后将其作为单个语句执行,如下所示:
$glob=glob($dir."*.csv");
foreach ($glob as $filename) {
$handle = fopen($filename,"r");
while ($da = fgetcsv ($handle,1000,",","'")) {
if ($da[0]) $data[]="('','$filename','".JOIN("','",array_slice($da,0,2))."')";
}
}
$mysql="INSERT INTO tblCoordinates (id,filename,lat,lon) VALUES\n".JOIN(",\n",$data);
// echo $mysql // --> check it first ...
mysql_query($mysql);
在$dir='./'
echo
上运行我的数据,INSERT INTO tblCoordinates (id,filename,lat,lon) VALUES
('','./dat.csv','1','23'),
('','./dat.csv','2','27'),
('','./dat.csv','3','31'),
('','./dat.csv','4','35'),
('','./dat.csv','5','39')
给了我这个
mysql_query()
您的陈述是什么样的 - 最重要的是 - 您的错误消息?
(当然:mysqli_query()
函数已弃用,请改用setInterval
...)