我从一个文件夹中检索文件名列表,并需要使用php将其插入到mysql数据库中。从文件夹中插入一个文件名列表到mysql
我插入数据库,它开始建设,不会停止。它的文件夹中只有约20个项目,但它一直循环到数据库:
<?php
$directory = "/xml/";
$results_array = array();
if(is_dir($directory)) {
if($handle = opendir($directory)){
while(($file = readdir($handle)) !== false) {
$results_array[] = $file;
}
closedir($handle);
}
}
foreach($results_array as $value) {
$e_get = substr($value, 0, 16);
$edate = substr($e_get, -6);
$checkDB = $pdo->query("select `dateString` from `report`");
$checkDB->fetchAll();
foreach($checkDB as $checkItems){
if($checkItems->dateString != $edate) {
$pdo->query("insert into `report`(`dateString`) values
('$edate');
}
}
}
现在我尝试不同的方式,但我只拿到一个项目:
<?php
$directory = "/xml/";
$results_array = array();
if(is_dir($directory)) {
if($handle = opendir($directory)){
while(($file = readdir($handle)) !== false) {
$results_array[] = $file;
}
closedir($handle);
}
}
$edate = array();
foreach($results_array as $value) {
$e_get = substr($value, 0, 16);
$edate[] = substr($e_get, -6);
}
foreach($edate as $date) {
$checkDB = $pdo->query("select `dateString` from `report`");
foreach($checkDB as $checkItems) {
if($checkItems->dateString != $date) {
$pdo->query("insert into `report`(`dateString`) values
('$edate');
}
}
}
请帮助...谢谢!
你正在走错这个方向。 '读取,检查,插入'方法导致可能的竞争条件,所以应该避免,并且为了实现它,您需要在_every_插入之前将整个表读入内存。相反,您应该在数据库中将'dateString'标记为唯一的,使用'INSERT IGNORE ...'插入新值,并检查'affected_rows'以查看它是否有效(如果您关心 - 您可能很乐意忽略重复项) – 2015-01-26 23:55:54
感谢您的建议... – smor 2015-01-27 00:15:38
好吧我改变我的数据库(dateString)为唯一的,它不会重复,但是当使用上面的第一个例子,我写它只插入第一个然后停止...整个目录等于21个文件,只有第一个被插入。我需要改变什么? – smor 2015-01-27 15:46:14