2012-10-19 17 views
0

我不知道如何從我的數據庫中分配每個用戶作爲類屬性並顯示它們。看一看。例如,我有這個表在我的數據庫:如何將多個用戶從數據庫分配到類屬性?

+----+----------+------------+-----------+ 
| 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); 

我的問題是如何寫的方法,顯示了所有用戶一個接一個?我的意思是類似於我的user_nfo函數,但僅用於所有記錄?我嘗試了使用PDOfetchAll的「foreach」循環,但它只是覆蓋屬性並僅顯示最後一條記錄。

+0

使用數組而不是odd user_info變量..然後您可以從數據庫中獲取所有用戶。 – Sutha

回答

2

你想要的是一個叫做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 
    ); 
} 
?> 

這有幫助嗎?

+0

是的,它幫助,非常感謝:] – Guu

+0

這就是我們所說的ORM或對象關係映射。基本上,它聲明我們可以創建一個與數據庫具有相同對象關係結構的對象。 –

0

感謝「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」。

+0

我改進了我的答案,它包括您的最新修訂版 –

相關問題