2013-04-15 3 views
-1

У меня есть это. Im сканирует каталог с файлами (например: count.php.2013-04-11_151028.bak). Из имени файла мне нужны только дата и время, и я хочу вставить их в таблицу базы данных (table2) с двумя полями (file_date -timestamp, count-int). Подсчитайте, сколько раз указана дата в этой папке (например: если имя файла 5 содержит количество дат, число будет равно 5. Если дата из файла не имеет записей в db, дата будет вставлена, а счет будет равен 1.). Все вставленные файлы будут удалены из исходного каталога в другой, потому что я не хочу сканировать все те же файлы.Почему не работает INSERT и UPDATE?

$ dir = "route1"; $ files = scandir ($ dir);

foreach ($files as $file_name) 
{ 
$data = ''; 
$an = substr($file_name, -21, 4); 
$luna = substr($file_name, -16, 2); 
$zi = substr($file_name, -13, 2); 
$ora = substr($file_name, -10, 2); 
$min = substr($file_name, -8, 2); 
$data = $an. '-' .$luna. '-' .$zi. ' ' .$ora. ':' .$min.':'.'00'; 

if(strtotime($data) == FALSE) continue; 

$result = mysqli_query($con,"SELECT count(*) as total FROM table2 WHERE file_date='$data'"); 
$row = mysqli_fetch_array($result, MYSQLI_ASSOC); 

if($row >0) { 
mysqli_query($con, "UPDATE table2 SET count=count+1 WHERE file_date='$data'"); 
     } 
else { 
mysqli_query($con,"INSERT INTO table2 (file_date, count) VALUES ('$data',1)"); 

$source = "route1"; 
$destination = "route2"; 

foreach ($files as $file) { 
    if (in_array($file, array(".",".."))) continue; 

    if (copy($source.$file, $destination.$file)) { 
    $delete[] = $source.$file; 
      } 
      } 
foreach ($delete as $file) { 
     unlink($file); 
      } 
     } 
} 

ответ

1

count() является reserved keyword. Вам нужно положить его в клещах:

UPDATE table2 SET `count`=`count`+1 WHERE file_date='$data' 
INSERT INTO table2 (file_date, `count`) VALUES ('$data',1) 
+0

Таблица из базы данных по-прежнему пуста. Обновление, на мой взгляд, работает, но не вставляйте, если таблица пуста. Потому что я вручную помещаю дату из 1 файла со счетом 1 и после подсчета количества обновлений составляет 2. – Demis

+0

[Нет, COUNT не является зарезервированным словом в MySQL] (http://dev.mysql.com/doc/mysqld-version-reference /en/mysqld-version-reference-reservedwords-5-5.html). Тем не менее, это плохая идея использовать COUNT в качестве имени поля. – Jocelyn

1

хорошо я нашел проблему и заключается в следующем: линии заменить: если ($ строка> 0)

с: если ($ строки [ 'total']> 0).

И проблема решена! Вставка и обновление. Благодаря!

Смежные вопросы