Intereting Posts
PHP записывает 800 записей в файл (.txt) из базы данных Как удалить zip-файл с помощью php MySQL Выбор столбца до номера Встроенное расположение журнала ошибок сервера PHP CodeIgniter Active Record несколько операторов «где» и «или» Предупреждение: mysqli_fetch_array () ожидает, что параметр 1 будет mysqli_result, заданный массив Ошибка получения маркера доступа OAuth2: ошибка 500 Загрузите веб-страницу с изображениями и таблицами стилей и (необязательно). PHP создает трехмерный массив из массива с тремя значениями Передача значений в MySQL IN в подготовленном заявлении PDO? Замена $ _GET, чтобы заставить его работать из командной строки PHP Выводит XML в ASCII, когда мне нужен UTF-8 Предотвращение прямого доступа к изображениям с использованием URL-адреса браузера CakePHP Неопределенная радиокнопка изменена на нежелательное значение для отправки Android с php: сохранение строки utf-8 в MySQL

удалить целую строку после x mins в mysql db и PHP

Я пытаюсь настроить sql db, где пользователи должны подтвердить свой адрес электронной почты. Мне интересно, есть ли способ автоматического удаления пользователей в sql db, которые пытались зарегистрировать (отправить их информацию), но не подтвердить свой адрес электронной почты после x количества минут.

сценарий, который я написал, вставляет свою информацию прямо в db, а затем обновляет столбец на db до «ACTIVE», как только пользователи подтвердили, поэтому я не вставляю данные после их активации, но прежде со статусом "НЕ АКТИВЕН". Затем, когда они подтверждают свой адрес электронной почты, этот статус переходит в «АКТИВНО».

поэтому, если пользователи отправляют свою информацию, но не подтверждают свой адрес электронной почты, их данные все еще находятся в БД. Мне нужно что-то, что автоматически удалит строку со статусом «NON_ACTIVE» через x минут, когда они отправят свою информацию. У меня есть еще одна колонка в БД с их точным временем и датой отправки.

есть идеи?

Я бы написал заявление, подобное @Lars:

DELETE FROM users WHERE (mailsent < NOW() - INTERVAL @x MINUTE) AND (state = 'NON_ACTIVE') 

но вам не нужно иметь задание cron или триггер для этого. Просто разместите его на одной из страниц PHP, доступ к которым вы можете получить (например, на странице входа или регистрации?). Это может даже быть настроено не запускать каждый раз, но сказать, один раз для каждых сотен логинов, если вы не возражаете, некоторые записи удаляются через несколько секунд или минут спустя.

SQL будет DELETE FROM users WHERE (now() - mailsent) > (120*60) AND state = "NON_ACTIVE" , где пользователи – это имя таблицы, mailsent – метка времени почтового рассылки и 120 – количество минут, которое вы хотите, тайм-аут.

Вы можете просто запустить эту команду с помощью cronjob в linux-системе с cron -e someUser и ввести следующую строку

 * * * * * mysql myDatabase < 'DELETE FROM users WHERE (now() - mailsent) > (120*60) AND state = "NON_ACTIVE"' 

Это будет запускать команду каждую минуту. Обратите внимание, что ваш someUser должен иметь доступ к базе данных mysql без пароля, например, поместив пароль в $ HOME / .my.cnf

Сохраните время создания строки в новом столбце.

Иметь другой скрипт (называемый cron?) Или часть вашего другого кода сайта, периодически удалять любые / все строки в таблице с Status = "NON_ACTIVE", которые были созданы больше, чем X минут назад.

Psudeo-sql: Удалить из UserTable Где (status = "NON_ACTIVE" И (Минуты (now () – createdate))> 30);

Два задания, пытающихся удалить одну и ту же запись, – это возможное состояние гонки, но не очень плохое.

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

Как насчет использования события mysql?

https://dev.mysql.com/doc/refman/5.1/en/events.html

 CREATE EVENT delete_event ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 1 DAY ON COMPLETION PRESERVE DO BEGIN DELETE messages WHERE date < DATE_SUB(NOW(), INTERVAL 7 DAY); END; 

Я нашел его здесь