【问题标题】:php - foreach loop only runs onephp - foreach 循环只运行一个
【发布时间】:2014-12-29 08:34:08
【问题描述】:

我有这个 foreach 循环:

$d=$dbh->prepare("SELECT * FROM users_rented WHERE since <= unix_timestamp(CURRENT_TIMESTAMP - INTERVAL 14 day) AND clicks_last <= unix_timestamp(CURRENT_TIMESTAMP - INTERVAL 14 day)");
    $d->execute();
        $array = array();
        foreach ($d as $data ) {
                 $array[] = $data['id'];
                     #print_r($new_array);
                     $userToRecycleFor = $data['user_by'];

                    $outcome =  $rentedrefs->_recycleMulti(0, $userToRecycleFor, $array, 1);


        }

当我在 MySQL 数据库中运行 $d 查询时,它有 2406 个结果。

foreach 循环在每次页面刷新时只运行 1 次。因此,它不是更新所有 2406 个用户(根据 SQL 查询),而是每次刷新只更新 1 个。

我做错了什么?

【问题讨论】:

标签: php mysql for-loop pdo foreach


【解决方案1】:

你需要在循环之前获取数据

$result = $d->fetchAll();

foreach ($result  as $data ) {
   $userToRecycleFor = $data['user_by'];
}

【讨论】:

    【解决方案2】:

    您必须在循环之前获取结果。尝试更改这些行:

    $d->execute();
    
    $array = array();
    
    $rows = $d->fetchAll(PDO::FETCH_ASSOC);
    
    foreach ($rows as $data) {
         $array[] = $data['id'];
         $userToRecycleFor = $data['user_by'];
    
         $outcome =  $rentedrefs->_recycleMulti(0, $userToRecycleFor, $array, 1);
    }
    

    【讨论】:

      【解决方案3】:

      通常,您会像这样获取结果:(例如 mysqli)

      $mysqli = new mysqli(HOST, USER, PASSWORD, DB);
      $query = $mysqli->query("SELECT id, name, store FROM food");
      
      while($array = $query->fetch_array(MYSQLI_ASSOC))
      {
         $finalArray = $array;
      }
      
      foreach($finalArray as $item)
      {
         // your process
      }
      

      【讨论】:

        猜你喜欢
        • 2013-11-28
        • 1970-01-01
        • 1970-01-01
        • 2013-11-06
        • 2014-12-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-02-01
        相关资源
        最近更新 更多