Как запускать l oop каждые 24 часа и удалять строки из таблицы mysql - PullRequest
0 голосов
/ 03 марта 2020

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

Функция

  function find_by_job_status($status) {
    global $db;
    // create a prepared statement
    $sql = "SELECT * FROM jobs WHERE status = ?";
    $stmt = mysqli_stmt_init($db);
    mysqli_stmt_prepare($stmt, $sql);
    // bind parameters for placeholders
    mysqli_stmt_bind_param($stmt, "s", $status);
    // execute the query
    mysqli_stmt_execute($stmt);
    return mysqli_stmt_get_result($stmt);
    // close statement
    mysqli_stmt_close($stmt);
  }

  function delete_pending_jobs() {
    $jobs = find_by_job_status('pending');
    while ($row = mysqli_fetch_assoc($$jobs)) {
      // Delete All Pending jobs
      // Wait for 24 hours
      // Loop again
    }
  }

1 Ответ

0 голосов
/ 03 марта 2020

Лучший способ execute every 24 hours is cronjob. Здесь вы можете прочитать о том, как их настроить: Как создать задание cron, используя PHP?

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

function find_by_job_status($status) {
  global $db;

  // create a prepared statement
  $sql = "SELECT * FROM jobs WHERE status = ?";
  $stmt = mysqli_stmt_init($db);
  mysqli_stmt_prepare($stmt, $sql);

  // bind parameters for placeholders
  mysqli_stmt_bind_param($stmt, "s", $status);

  // execute the query
  mysqli_stmt_execute($stmt);

  // store the result in var
  $result = mysqli_stmt_get_result($stmt);

  // close statement
  mysqli_stmt_close($stmt);

  // return result
  return $result;
}

function delete_pending_jobs() {
  global $db;

  $jobs = find_by_job_status('pending');

  while ($row = mysqli_fetch_assoc($jobs)) {
    $stmt = mysqli_stmt_init($db);

    // create a prepared statement
    $sql = "DELETE FROM jobs WHERE id = ?";
    mysqli_stmt_prepare($stmt, $sql);

    // bind parameters for placeholders
    mysqli_stmt_bind_param($stmt, "s", $row['id']);

    // execute the query
    mysqli_stmt_execute($stmt);

    // close statement
    mysqli_stmt_close($stmt);
  }
}

Я бы предпочел передать функцию delete_pending_jobs на новый исполняемый файл от cronjob.

...