У меня есть это. 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 файла со счетом 1 и после подсчета количества обновлений составляет 2. – Demis
[Нет, COUNT не является зарезервированным словом в MySQL] (http://dev.mysql.com/doc/mysqld-version-reference /en/mysqld-version-reference-reservedwords-5-5.html). Тем не менее, это плохая идея использовать COUNT в качестве имени поля. – Jocelyn