我在努力學習OOPHP,我想我到了那裏。我只是不知道輸出多個數據庫行的最佳方式是什麼。PHP OOP:處理來自數據庫的多行輸出,最好的辦法呢?
我試着通常做函數內輸出第一方法,但我認爲這種失敗的OOP的目的。
我也試過在類中設置一個public $list
數據庫查詢將所有數據推送到然後遍歷代碼之外的數據,但理想情況下我想從查詢中創建對象的多個實例並使用它們的公共變量(我的測試用例中的id,name和eyecolour)來獲取數據,這樣數據總是來自同一個地方。但是,如何從類中的查詢創建多個對象,然後如何通過循環來顯示它們,以及如何區分它們或僅針對具有特定值的特定對象?
我已經經歷了多個主題拖網,但他們似乎都專注於問題的具體情況。我想從這個簡單的意義上了解它,然後我可以將它應用到更大的項目中。
這裏是我一直在玩弄代碼:
class Ignition {
public function dataConnection() {
return new PDO('mysql:host=localhost;port=8889;dbname=oop_testing','root','root',array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));
}
}
class People {
private $db;
// Each person has a
public $id;
public $name;
public $eyecolour;
public $list = array();
public function __construct() {
$this->db = new Ignition();
$this->db = $this->db->dataConnection();
}
public function getList() {
echo "People:<br /><br />";
$sql = $this->db->prepare("SELECT * FROM people");
$sql->execute();
//$this->list = $sql->fetch(PDO::FETCH_ASSOC);
while($person = $sql->fetch(PDO::FETCH_ASSOC)) {
array_push($this->list, $person);
}
/*while($person = $sql->fetch(PDO::FETCH_ASSOC)) {
echo $person['name'] . "<br />";
}*/
}
public function getIndividual($search, $by = "id") {
$sql = $this->db->prepare("SELECT * FROM people WHERE $by = :search");
//$sql->bindParam(":by", $by);
$sql->bindParam(":search", $search);
$sql->execute();
$individual = $sql->fetch(PDO::FETCH_ASSOC);
$this->id = $individual['id'];
$this->name = $individual['name'];
$this->eyecolour = $individual['eyecolour'];
}
}
$people = new People();
$people->getList();
/*echo "<pre>";
var_dump($people->list);
echo "</pre>";*/
foreach ($people->list as $person) {
echo $person['name'];
}
$people->getIndividual(1);
echo "<br />Name: " . $people->name;
echo "<br />Eye Colour: " . $people->eyecolour;
這似乎適用於我想要的功能。那麼'FETCH_CLASS'是否會根據數據庫列名填充屬性? – Adam
是的,如果你想要而不是這種方法,你可以得到結果作爲一個簡單的數組,並創建一個函數,設置對象的值。全部取決於情況和你在做什麼。 – Pitchinnate
沒有,這是完美的,我想要的,謝謝! – Adam