我從一個文件夾中檢索文件名列表,並需要使用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