首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >FETCH_ASSOC只显示1个数据和无限循环

FETCH_ASSOC只显示1个数据和无限循环
EN

Stack Overflow用户
提问于 2018-08-09 10:54:30
回答 2查看 267关注 0票数 0

我目前正在获取我的项目中的教堂列表,其中有3个数据,但问题是,当我尝试在while中循环时,它循环无限,而当var_dump只显示1个数据时。但是当我使用PDO时,它可以正常工作。

这里的是我的数据库类

代码语言:javascript
复制
<?php
namespace classes\worker;

use \mysqli;

const DB_HOST = 'localhost';
const DB_USERNAME = 'root';
const DB_PASSWORD = '';
const DB_NAME = 'db_sk';

class Database {
    public function __construct() {
        $this->db = new mysqli(DB_HOST, DB_USERNAME, DB_PASSWORD, DB_NAME);

        if($this->db->connect_error) {
            die($this->db->connect_error);
        }
    }

    protected function select($table, $condition = '', $column = '*') {
        $condition = ($condition == '') ? '' : ' WHERE ' . $condtion;

        $query = 'SELECT ' . $column . ' FROM ' . $table . $condition . ';';

        $sth = $this->db
                    ->query($query);

        if($sth) {
            return $sth;
        } else {
            return $this->db
                        ->error;
        }
    }

    protected function insert($table, array $data) {
        ksort($data);

        $column = join(', ', array_keys($data));
        $values = '"' . join('", "', array_values($data)) . '"';

        $query = 'INSERT INTO ' . $table . '(' . $column . ') VALUES(' . $values . ');';

        $sth = $this->db
                    ->query($query);

        if($sth) {
            return $this->db
                        ->insert_id;
        } else {
            return $this->db
                        ->error;
        }
    }

    protected function update($table, array $data, $condition) {
        ksort($data);

        $set = '';

        foreach($data as $keys => $values) {
            $set .= $keys . '="' . $values . '", ';
        }

        $set = rtrim($set, ', ');

        $query = 'UPDATE ' . $table . ' SET ' . $set . ' WHERE ' . $condition . ';';

        $sth = $this->db
                    ->query($query);

        if($sth) { return true; } else { return false; }
    }

    protected function delete($table, $condition) {
        $query = 'DELETE FROM ' . $table . ' WHERE ' . $condition . ';';

        $sth = $this->db
                    ->query($query);

        if($sth) { return true; } else { return false; }
    }
}

这里是我的教堂班级

代码语言:javascript
复制
<?php
namespace classes\helper;

use \classes\worker\{Database};

final class Church extends Database {
    public function getChurch() : object {
        return $this->select('tbl_church_info', '', 'acc_id, name');
    }
}

,下面是我测试结果的页面:

代码语言:javascript
复制
<?php 
    use \classes\helper\{Church}; 

    $church = (new Church())->getChurch();

    var_dump($church); // only show 1 data but has 3 data in database

    while(($row = $church->fetch_assoc()) !== NULL) {
       echo $row['acc_id']; 
    } // which loop infinite

?>
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-08-10 12:28:51

我所做的解决方案是。在教堂的类中,我已经返回了结果。

代码语言:javascript
复制
<?php
namespace classes\helper;

use \classes\worker\{Database};

final class Church extends Database {
    public function getChurch() : array {
        $selected = $this->select('tbl_church_info', '', 'acc_id, name');

        while(($row = $selected->fetch_assoc()) !== NULL) {
          $tmp[] = $row;
        }

        return $tmp;
    }
}

然后我很容易看到结果上的输出,

代码语言:javascript
复制
<?php 
    use \classes\helper\{Church}; 

    $church = new Church();

    foreach($church->getChurch as $list) {
      var_dump($list); // and works properly :)
    }

?>
票数 0
EN

Stack Overflow用户

发布于 2018-08-09 11:13:15

这是因为您只调用fetch_assoc一次

代码语言:javascript
复制
   $church = (new Church())->getChurch()->fetch_assoc();
    var_dump($church); // only show 1 data but has 3 data in database
    while(($row = $church)) {
       echo $row['acc_id']; 
   } // which 

在那里它可能像这样

代码语言:javascript
复制
   $church = new Church();
    while($row = $church->getChurch()->fetch_assoc()) {
       echo $row['acc_id']; 
    } // which 

类似的问题在这里MySQL fetch_assoc() shows 1 less result

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51758162

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档