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

Php 如何每24小时运行一次循环并从mysql表中删除行,php,mysql,loops,while-loop,Php,Mysql,Loops,While Loop,我想做一个函数,删除状态为挂起的所有作业。我想每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_st

我想做一个函数,删除状态为挂起的所有作业。我想每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
。在这里,您可以阅读如何设置这些:

您的代码应该是这样的。在第一个函数中,我首先存储了结果,因为一旦返回某个内容,其余的代码就不会执行

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\u pending\u jobs
功能外包给cronjob执行的新文件。

我认为每24小时执行一次的最佳方式是cronjob。您的代码中没有抛出错误的
mysqli\u fetch\u array()
函数调用。@RobinGillitzer我正在使用
mysqli\u fetch\u assoc()
您的问题只是如何每24小时执行一次还是标题中的错误消息?@RobinGillitzer哦,对不起,我没有注意到标题。现在更新了我想每24小时运行一次你可以用cron作业来完成!或者睡眠功能很好,每24小时运行一次页面,cron作业更有用。将while($row=mysqli\u fetch\u assoc($$jobs)更改为while($row=mysqli\u fetch\u assoc($jobs)