【问题标题】:How to run loop every 24 hours and delete rows from mysql table如何每24小时运行一次循环并从mysql表中删除行
【发布时间】:2020-06-15 13:14:07
【问题描述】:

我想创建一个函数来删除所有状态为待处理的作业。我想每 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
    }
  }

【问题讨论】:

  • 我认为每 24 小时执行一次的最佳方式是 cronjob。您的代码中没有mysqli_fetch_array() 的函数调用会引发错误。
  • @RobinGillitzer 我正在使用mysqli_fetch_assoc()
  • 你的问题是只有如何每24小时执行一次还是你标题中的错误信息?
  • @RobinGillitzer 哦,抱歉,我没注意到标题。现在更新了
  • 我想每 24 小时运行一次 你可以通过 cron 作业来做到这一点!或者睡眠功能很好,它将每 24 小时运行一次您的页面,cron 作业更有用。将while ($row = mysqli_fetch_assoc($$jobs) 更改为此while ($row = mysqli_fetch_assoc($jobs)

标签: php mysql loops while-loop


【解决方案1】:

execute every 24 hours is cronjob 的最佳方式。在这里您可以了解如何设置这些:How to create cron job using 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 执行的新文件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多