猿问

如何每24小时运行一次循环并从mysql表中删除行

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

    }

  }


慕后森
浏览 134回答 1
1回答

不负相思意

最好的办法execute every 24 hours is cronjob。在这里您可以了解如何设置这些:如何使用 PHP 创建 cron 作业?你的代码应该是这样的。在第一个函数中,我首先存储了结果,因为一旦返回某些内容,其余代码将不会执行。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 执行的新文件。
随时随地看视频慕课网APP
我要回答