首页 文章

PHP PDO FetchAll vs Fetch

提问于
浏览
0

我相信我使用的PDO获取功能完全错误 . 这是我想要做的:

查询一行,获取结果,使用辅助函数将结果处理成一个数组 .

询问

function userName($db){
  $q = $db->prepare("SELECT id, name FROM users WHERE id = :user");
  $q->bindParam(":user", $user);
  $q->execute();
  $qr = $q->fetchAll(PDO::FETCH_ASSOC);
  if ($qr->rowCount() > 0){
    foreach($qr as $row){
      $names[$row['id']] = buildArray($row);
    }
  return $names;
  }
}

我的自定义数组构建功能

function buildArray($row){
 $usernames = array();
 if(isset($row['id'])) $usernames['id'] = $row['id'];
 if(isset($row['name'])) $usernames['name'] = $row['name'];
}

我实际上正是得到了我想要的东西,但是当我在中间回声时,我发现事情是循环3次而不是一次 . 我想我在滥用fetchAll .

任何帮助赞赏

1 回答

  • 5

    如果你're going to build a new array, there'没有太多意义让 fetchAll() 构建一个数组 . 编写自己的 fetch() 循环:

    function userName($db){
        $q = $db->prepare("SELECT id, name FROM users WHERE id = :user");
        $q->bindParam(":user", $user);
        $q->execute();
        $qr = $q->fetchAll(PDO::FETCH_ASSOC);
        $names = array();
        while ($row = $q->fetch(PDO::FETCH_ASSOC)) {
            $names[$row['id']] = $row;
        }
        return $names;
    }
    

    也不需要 buildArray() ,因为 $row 已经是您想要的关联数组 .

相关问题