【问题标题】:i am getting infinite results when i use fetch(PDO::FETCH_ASSOC)当我使用 fetch(PDO::FETCH_ASSOC) 时,我得到了无限的结果
【发布时间】:2017-01-22 23:02:08
【问题描述】:

我在一个名为 ManageNews 的类中有这个函数:

function getLatestNews($limit){

    $query = $this->link->query("SELECT * FROM news ORDER BY date DESC LIMIT $limit");
    $count = $query->rowCount();
    if ($count !== 0){

          while ($row = $query->fetch(PDO::FETCH_ASSOC)) {

              return $row;

          }

    }

}

当我尝试从数据库中获取新闻帖子的信息时,我将它们作为数组获取,我尝试使用 fetchAll(PDO::FETCH_ASSOC),但它会将它们放入多维数组中,因此我无法使用 $row[0]['column name']; 获取它们,因为它们不都是 [0] 其余的是 [1] [2] [3] 等等...所以这就是我的做法:

$news = new ManageNews();
$row = $news->getLatestNews('5');
  $article_id = $row['article_id'];
  $user_id = $row['user_id'];
  $title = $row['title'];
  $content = $row['content'];
  $date = $row['date'];
  print_r($row);
  $user = new ManageUsers();
  $row2 = $user->getUserById($user_id);
  if($row2 !== 1){
    $user_name = $row2['username'];
    $title2 = str_replace(" ","-",$title);
    echo '<div class="row">
    <div class="col-lg-12"><h3 class="para"><a class="para" href="http://news.red-sec.net/article/'.$article_id.'/'.$title2.'">'.$title.'</a></h3>
    <p class="para">Written by: '.$user_name.'</p>
    </div>
    </div>';
  }

我正在做print_r($row); 来查看数组。当它工作时,它只会无限次打印最新的......我不知道它为什么这样做,任何帮助表示赞赏

这就是现在的样子: http://prntscr.com/dz2b02

【问题讨论】:

  • 因为每次调用getLatestNews()时都会执行相同的查询并返回相同的第一个结果
  • 我正在通过 getLatestNews('5');仅获取 5 条最新消息
  • 函数执行的第一件事是执行查询:$query = $this-&gt;link-&gt;query("SELECT * FROM news ORDER BY date DESC LIMIT $limit");... 每次调用函数时都会重复此操作.... 然后函数将返回第一行(如果有行) 或 0.... 它从不尝试获得第二个或第三个或第四个等
  • th 函数只被调用一次,我知道我做了 fetchAll(PDO::FETCH_ASSOC) 但是当我这样做时,我得到一个包含不同数组的数组。我不知道如何访问这些数组中的每一个数组看起来像 [ [ [news post 1] ] [ [news post 2] ] [ [news post 3] ] [] [] ]
  • 有没有办法在数组上运行 foreach 以获取其中的单独数组??

标签: php arrays pdo


【解决方案1】:

我个人会使用生成器(只是为了保持基本功能与您已经编写的方式相似)

function getLatestNews($limit){

    $query = $this->link->query("SELECT * FROM news ORDER BY date DESC LIMIT $limit");
    $count = $query->rowCount();
    if ($count !== 0){

      while ($row = $query->fetch(PDO::FETCH_ASSOC)) {
          yield $row;
      }
    }
}

【讨论】:

  • 我试试看告诉你
  • Generators cannot return values using "return" 我得到这个错误
  • function getLatestNews($limit){ $query = $this->link->query("SELECT * FROM news ORDER BY date DESC LIMIT $limit"); $count = $query->rowCount(); if ($count !== 0){ while ($row = $query->fetch(PDO::FETCH_ASSOC)) { yield $row; } }else{ 返回 $count; } }
  • 我发布的生成器代码中哪里有返回?
  • 如果没有要产生的数据,或者返回最后一条记录,你会得到一个null,这是一个错误的结果
【解决方案2】:

我修复了它

while($row = fetchAll(PDO::FETCH_ASSOC)){
    return $row;
}

在我做的文件中:

foreach($row as $r){do what i need to do}

【讨论】:

  • 如果我是这样修复的,请不要编辑我的答案......这个修复有效
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-28
  • 2021-04-11
  • 1970-01-01
  • 2012-08-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多