2015-08-11 3 views
3

Итак, я проделал довольно много поисков по этой теме, и я просто не могу найти ответ. Итак, в основном, я ищу сделать небольшой веб-сайт, который будет извлекать информацию из формы HTML, отправлять ее в базу данных, а затем через два часа она автоматически удалит себя. У меня есть базовая теория о том, как это может работать, но я не могу понять, как это сделать: я мог бы вытащить текущее время и дату, добавить два часа к этому, а затем поместить время в столбец «expires» в база данных. По истечении времени, которое находится в столбце expires, данные будут удалены из базы данных. Извините, если это очень «нубийский» вопрос, я все еще немного новичок в базах данных с PHP.Добавить данные в базу данных, автоматически удалить через определенное время?

В любом случае, любая помощь будет высоко оценена! Благодаря!

+0

В какой базе данных у вас есть? – bfontaine

+1

Просто используйте задачу cron, которая удалит все данные> 2 часа. –

+0

Вы можете попробовать cron. Я думаю, что это будет лучшее решение. –

ответ

4

Вы можете добавить новый столбец временной метки к вашей таблице, которая будет автоматически добавлять метки времени, когда строка была создана, как так

CREATE TABLE t1 (
    #your existing columns defined as before + this new column 
    ts_created TIMESTAMP DEFAULT CURRENT_TIMESTAMP 
); 

Теперь каждый раз, когда вы создаете строку в этой таблице, MySQL делает все работа записи, когда она была создана.

Предполагая, что вы не сможете создать задание cron на своем хосте, вы можете добавить код удаления в наиболее очевидное место вашего существующего кода сайта для удаления.

// remove old stale data 
$sql = "DELETE FROM user 
     WHERE ts_created < DATE_ADD(NOW(),INTERVAL -2 HOUR)"; 

if (! $mysqli->query($sql)) { 
    // log $mysqli->error somewhere 
} 

Хотя хрон работа кажется хорошей идеей, на первый взгляд, для того, чтобы убедиться, что всегда точны в этой таблице вы должны запустить его через каждые 30 секунд, или, может быть, даже чаще. Это будет мешать другим действиям в этой таблице, если сайт был занят, что может быть проблемой, если он не занят, вы просто будете использовать cron без необходимости большую часть времени.

Если вы добавите код удаления непосредственно перед тем, как представить эту информацию пользователю, по крайней мере, он будет запускаться только при необходимости, и вы также убедитесь, что таблица всегда была точной на момент представления данных пользователю.

+0

Да, я, вероятно, не могу использовать задания cron, поскольку мой веб-хост разрешает только один час или больше ... Единственное, что кажется довольно сложным. – iSasFTW

+0

На самом деле, не ** слишком ** сложно, но у меня есть моя таблица уже сделана в PHPMyAdmin. Поэтому, если я просто добавлю текущую временную метку, ее можно просто установить каждый раз, когда будут добавлены новые данные. – iSasFTW

+0

Да, это то, что произойдет. Возможно, вам придется очистить строки, существовавшие до изменения таблицы вручную, хотя – RiggsFolly

0

Просто добавьте столбец remove_time (DATETIME) и установите время, которое хотите удалить строку. Чем использования хрон (конфигурация зависит от веб-хостинг у вас есть), чтобы запустить этот запрос (вероятно, poart из PHP сценария):

DELETE FROM table WHERE remove_time <= NOW() 

Вы можете настроить хрон запускать каждую минуту (или меньше/больше, в зависимости от ваших потребностей) ,

0
  1. Попробуйте реализации хрон, который будет выполняться в заданное время автоматически проверять и удалять строки, в которых created_at меньше CURRENT_TIME на 2 часа. ответ

  2. О том, как реализовать хрон, проверить Skilldrick в here

Спасибо :)

+0

Что мне помещать внутри cron.php? – iSasFTW

+0

EDIT: Я предполагаю, что я положил часть удаления там ... В любом случае, поэтому я должен добавить created_at и current_time в свою таблицу? – iSasFTW

+0

Добавить в вашу базу данных только ** created_at **. Переменная ** current_time ** будет установлена ​​в php -> '$ current_time = time(); это вернет вам временную метку Unix. Следующим шагом будет вычисление отметки * unix * ** 2 часа ** до текущая временная метка, например 'temp_timestamp'. И, наконец, удалите поля, которые ** created_at ** меньше, чем '$ temp_timestamp'. –

2

Вы можете убедиться, запускается планировщик, когда MySQL запускается с параметром командной строки - -event-scheduler = ON или установка event_scheduler = ON в файле конфигурации MySQL (my.cnf или my.ini в Windows). Выполнить это утверждение запроса в MySQL

SET GLOBAL event_scheduler = ON; 

Создание MySQL планировщика событий, используя следующий - это будет вести себя как хроны, но на самом деле это MySQL триггер на определенном интервале. Это запускается с сервера mysql.

CREATE EVENT e_hourly 
ON SCHEDULE 
    EVERY 1 HOUR 
COMMENT 'Clears out sessions table each hour.' 
DO 
    DELETE FROM table_name WHERE UNIX_TIMESTAMP(NOW()) - UNIX_TIMESTAMP(remove_time) > 120 

http://dev.mysql.com/doc/refman/5.1/en/create-event.html
http://www.sitepoint.com/how-to-create-mysql-events/

Пардон мой объяснений - я сам реализовал это только сейчас, и она работала.

+0

, пожалуйста, отметьте мой ответ как правильный, если этот ответ вам помог. –

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