首页 > 解决方案 > MVC 查询不会从数据库中获取所有记录

问题描述

数据库存储了几个帐户:[winnie, winnie9, winnie10],但是当我获取数据时查询只返回一条记录。解决方案是什么?

模型方法:

protected function getApprovedUsers($login) {
        $sql = "SELECT `email`, `login`, `name`, `reg_date`, `pass`, `role` FROM `approved` WHERE `login` LIKE ?";
        $stmt = $this->connect()->prepare($sql);

        $stmt->execute([$login]);

        if($users = $stmt->fetchAll())
            return $users;

        return null;
    }

控制器调用模型:

    public function getCertainApprovedUser($login) {
        $users = $this->getApprovedUsers($login);

        if(is_array($users) || is_object($users)) {
            foreach ($users as $user) {
                return array("email"=>$user["email"], "login"=>$user["login"], "pass"=> $user["pass"],
                    "name"=> $user["name"], "reg_date"=> $user["reg_date"], "role"=> $user["role"]);
            }
        }
        else {
            throw new Exception("Nothing to fetch");
        }
    }
}

处理数据以使 LIKE 语句正常工作(%%):

$record = $userContr->getCertainApprovedUser("%$login%");

$someJSON = array(
    [
        "login"=>"{$record['login']}",
        "email"=>"{$record['email']}",
        "name"=>"{$record['name']}",
        "reg_date"=>"{$record['reg_date']}"
    ]
);

$newJSON = json_encode($someJSON);
echo $newJSON;

标签: phpmysqlweb

解决方案


在方法getCertainApprovedUser()中,您将在 foreach 中返回一个值。这会在第一次迭代时立即中断循环。

将您的循环更改为:

$result = []; // initialize an empty array
foreach ($users as $user) {
    // add a user to that array
    $result[] = array("email"=>$user["email"], "login"=>$user["login"], "pass"=> $user["pass"], "name"=> $user["name"], "reg_date"=> $user["reg_date"], "role"=> $user["role"]);
}
// return the array containing the users
return $result;

然后,要构建您的 json,请应用相同的逻辑:

$someJSON = [];

foreach ($record as $user)
{
    $someJSON[] = [
        "login"=>$user['login'],
        "email"=>$user['email'],
        "name"=>$user['name'],
        "reg_date"=>$user['reg_date']
    ];
}

推荐阅读