【问题标题】:$stmt->fetchAll(PDO::FETCH_ASSOC); No results$stmt->fetchAll(PDO::FETCH_ASSOC);没有结果
【发布时间】:2015-03-31 14:21:54
【问题描述】:

当我尝试使用 $stmt->fetch(PDO::FETCH_ASSOC); 时没有给出结果它给了我 3 倍相同的结果。

    $sql = "SELECT char_name, pvpkills FROM characters WHERE accesslevel=:normalPlayer AND pvpkills>=:minPvp ORDER BY pvpkills DESC LIMIT :maxRows";
            $stmt = $this->db->prepare($sql);
            $stmt->bindParam(':normalPlayer', $normalPlayer, PDO::PARAM_INT);
            $stmt->bindParam(':minPvp', $minPvp, PDO::PARAM_INT);
            $stmt->bindParam(':maxRows', $maxRows, PDO::PARAM_INT);
            $stmt->execute();
            $cuentaPvp = $stmt->rowCount();
            $resPvp = $stmt->fetchAll(PDO::FETCH_ASSOC);

            Session::init();
            Session::set('cuenta_pvp', $cuentaPvp);

            for($i = 0; $i<$cuentaPvp; $i++){
                Session::set('pvp_name'.$i, $resPvp['char_name']);
                Session::set('pvp_count'.$i, $resPvp['pvpkills']);
            }

【问题讨论】:

  • 您实际上并没有遍历$resPvp,这就是您得到相同结果的原因。

标签: php mysql pdo


【解决方案1】:

fetchAll 的结果是一个结构数组,因此您可以将 for 语句替换为:

foreach ($resPvp as $key => $value) {
    Session::set('pvp_name' . $key, $value['char_name']);
    Session::set('pvp_count' . $key, $value['pvpkills']);
}

【讨论】:

    【解决方案2】:

    将您的 for 循环更改为以下代码:

    for($i = 0; $i<$cuentaPvp; $i++){
                    Session::set('pvp_name'.$i, $resPvp[$i]['char_name']);
                    Session::set('pvp_count'.$i, $resPvp[$i]['pvpkills']);
                }
    

    【讨论】:

      【解决方案3】:

      为什么不对$stmt-&gt;fetchAll(...) 使用while 循环?

      【讨论】:

      • 因为fetchAll 会立即获取所有内容。您的首席运营官
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-05
      • 1970-01-01
      相关资源
      最近更新 更多