Php 如何将多个用户从数据库分配到类属性?

Php 如何将多个用户从数据库分配到类属性?,php,class,orm,Php,Class,Orm,我不知道如何将数据库中的每个用户分配为class属性并显示它们。看一看。例如,我的数据库中有一个表: +----+----------+------------+-----------+ | id | username | first_name | last_name | +----+----------+------------+-----------+ | 1 | guu | Guu | GuuShtein | | 3 | user1 | Allan

我不知道如何将数据库中的每个用户分配为class属性并显示它们。看一看。例如,我的数据库中有一个表:

+----+----------+------------+-----------+
| id | username | first_name | last_name |
+----+----------+------------+-----------+
|  1 | guu      |  Guu       | GuuShtein |
|  3 | user1    |  Allan     | Last      |
|  4 | Donny    |  Name      | Last Name |
+----+----------+------------+-----------+
下面是课堂:

class users {

public $db;
private $id;
private $username;
private $first_name;
private $last_name;

public function __construct($db) {
    $this->db=$db;
}

private function find_by_id($id) {
   $record = $this->db->query('SELECT * FROM users WHERE id=' . $id .' LIMIT 1')->fetch(PDO::FETCH_ASSOC);     
   foreach ($record as $atribute => $value) {
       $this->$atribute = $value;
   } 
}

public function user_nfo($id){
    $this->find_by_id($id);

    $user_nfo = "User id: " . $this->id . "<br />";
    $user_nfo .= "Username: " . $this->username . "<br />";
    $user_nfo .= "User full name: " . $this->first_name . " " . $this->last_name . "<br />";       
    return $user_nfo;
}
}

$users = new mysql_a($db);
echo $users->user_nfo(1);
类用户{
公帑$db;
私人$id;
私有$username;
私人$first_name;
私人$姓氏;
公共函数构造($db){
$this->db=$db;
}
私有函数按id查找($id){
$record=$this->db->query('SELECT*FROM users WHERE id='.$id.'LIMIT 1')->fetch(PDO::fetch_ASSOC);
foreach($atribute=>$value记录){
$this->$atribute=$value;
} 
}
公共功能用户信息($id){
$this->find_by_id($id);
$user\u nfo=“用户id:”.$this->id.“
”; $user\u nfo.=“用户名:”.$this->Username.“
”; $user\u nfo.=“用户全名:”.$this->first\u name.“$this->last\u name.”
”; 返回$user\u nfo; } } $users=newmysql_a($db); echo$users->user\u nfo(1);

我的问题是如何编写一个方法,一个接一个地显示所有用户?我的意思是类似于我的user\u nfo函数,但只适用于所有记录?我尝试了使用PDOETCHALL的“foreach”循环,但它只是覆盖属性并只显示最后一条记录。

您需要的是一个名为user的新对象,它具有您想要的所有属性,如下所示

<?php

try {
    $db = new PDO('mysql:host=localhost;dbname=sub_db;charset=UTF-8', DB_USER, DB_PASS);
    $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $db->setAttribute(PDO::ATTR_EMULATE_PREPARES, FALSE);
} catch (PDOException $ex) {
    echo "error";
}

class users {

    public $db;

    public function __construct($db) {
        $this->db=$db;
    }

    /**
     * Fetch all users and return an array of their mapped objects
     *
     * @author Daniel Noel-Davies
     *
     * @return array
     */
    public function getAllUsers () {
        $users   = array();

        // Grab an array of each user
        $users = $this->db->query('SELECT * FROM users')->fetch(PDO::FETCH_ASSOC);

        // Loop through the users
        foreach( $users as $index => $user ) {
            // Replace each row with an object of that user (keeps memory down)
            $users[$index] = new User($user);
        }

        // return our array containing an object of each user
        return $users;
    }

    public function count_row(){
        $count = $this->db->query('SELECT COUNT(*) FROM users')->fetch(PDO::FETCH_ASSOC);
        return $count['COUNT(*)'];
    }

    public function find_by_id($row) { 
       $record = $this->db->query('SELECT * FROM users LIMIT 1 OFFSET ' . $row)->fetch(PDO::FETCH_ASSOC);
       return $record;
    }   
 }


class user {

    public $id;
    public $username;
    public $first_name;
    public $last_name;

    public function __construct($record){    
           foreach ($record as $atribute => $value) {
               $this->$atribute = $value;
           }
    }
}

// Initiate our users class
$objUsers = new Users;

// Fetch all the users
$users = $objUsers->getAllUsers();

// Loop through them all
foreach ($users as $user) {
    // Using Printf keeps things neater, means you're template is tidier.
    printf(
        '%s<br />
        %s<br />
        %s<br />
        %s<br />',

        $user->id,
        $user->username,
        $user->first_name,
        $user->last_name
    );
}
?>
多亏了“NoelDavies”的回答,这里有一个完整的代码,我设法让它为我工作。如果有人出现同样的问题:

<?php

try {
$db = new PDO('mysql:host=localhost;dbname=sub_db;charset=UTF-8', DB_USER, DB_PASS);
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$db->setAttribute(PDO::ATTR_EMULATE_PREPARES, FALSE);
} catch (PDOException $ex) {
    echo "error";
}

class mysql_a {

    public $db;

    public function __construct($db) {
        $this->db=$db;
    }

    public function count_row(){
        $count = $this->db->query('SELECT COUNT(*) FROM users')->fetch(PDO::FETCH_ASSOC);
        return $count['COUNT(*)'];
    }

    public function find_by_id($row) { 
       $record = $this->db->query('SELECT * FROM users LIMIT 1 OFFSET ' . $row)->fetch(PDO::FETCH_ASSOC);
       return $record;
    }   
 }


class user {

    public $id;
    public $username;
    public $first_name;
    public $last_name;

    public function __construct($record){    
           foreach ($record as $atribute => $value) {
               $this->$atribute = $value;
           }
    }
}


$users = new mysql_a($db);

for ($i = 0; $i < $users->count_row(); $i++) {
    $user = new user($users->find_by_id($i));
    echo $user->id         . "<br />";
    echo $user->username   . "<br />";
    echo $user->first_name . "<br />";
    echo $user->last_name  . "<hr />";
}
?>


它以db为单位计算行数,然后逐个将它们取出并输出。我确信有一些更短更优雅的方式,但现在对我来说很好;]再次感谢“NoelDavies”。

使用数组代替奇数user\u info变量。。然后您可以从数据库中获取所有用户。这就是我们所说的ORM或对象关系映射。基本上,它声明我们可以创建一个对象,该对象具有与数据库相同的对象关系结构