簡體   English   中英

從數據庫加載PHP類對象-最佳實踐,數據庫句柄等

[英]loading a PHP class object from a database--best practices, database handle, etc

我認為我的問題也許已經在Stackoverflow上的其他位置得到了部分回答,但是我覺得通過一起詢問可以得到更全面的答案。 我為我可能會鍵入的任何內容都道歉-我在PHP中工作得不夠充分,所以當我這樣做時,我感覺就像在重新學習一遍。

無論如何,假設我有一個名為“ items”的mysql數據庫表,其中包含以下列: item_iditem_typeitem_name 我有一個PHP類,看起來像這樣:

class Item
{
    public $item_id;
    public $item_type;
    public $item_name;
}

換句話說,我真的只想要從數據庫到類對象的直接映射。

我決定在類“ load”中包含一個方法,該方法在提供item_id時檢索項目數據。 所以這是我的兩個問題:

  1. 在類中連接數據庫的最佳方法是什么? 我應該在類中實例化一個新的PDO對象,還是應該將PDO數據庫句柄作為裝入方法的參數傳遞進來? 有關系嗎?
  2. 這是否是分配類屬性的方式有意義,或者有更聰明的方法來執行此操作:

     $sth = $dbh->query("SELECT * FROM items WHERE item_id = $item_id"); $sth->setFetchMode(PDO::FETCH_CLASS, 'Item'); while ($obj = $sth->fetch()) { foreach ($obj as $key => $value) { $this->$key = $value; } } 

編輯:看到這些回答(可以肯定會引起有趣的閱讀)后,我意識到我可能沒有足夠詳細。

我認為使用ORM庫對於我正在做的事情可能是過大的(只是個人愛好項目,對雇主而言不算什么),但實際上,無論如何,我不確定那是我真正需要的。 這就是為什么。 因為我可能有這樣的事情:

class InventoryItem extends Item
{
    public $user_id;
    public $quantity;
}

我還沒有真正考慮到這一點。 僅舉一個例子。 因此,我用來獲取數據的查詢可能看起來像這樣:

SELECT * 
FROM items, inventories 
WHERE item.item_id = inventories.item_id 
AND user_id = $user_id;

換句話說,我必須創建一個可以正確提取該類數據的SQL語句,而我真的只需要知道是否應該傳遞數據庫句柄或在load方法中創建它,以及是否上面的代碼是分配屬性值的一種好方法。

另一個麻煩是我可能必須操縱一些數據(例如,如果其中一列正在存儲json編碼的數組或其他內容)。

我使用的是通用的數據庫對象類,然后有單獨的類(與數據庫中的不同表匹配),每個類對此進行了擴展。

數據庫對象類包含將行實例化為對象並執行任何操作的功能,擴展它們的類僅包含每個表對象的屬性。

最好在programmers.stackexchange上問這個問題,因為它是一個開放式的問題,我想有很多不同的方法可以做到這一點並就此事發表意見。

您正在尋找對象關系映射器(orm)。 這是一個庫,可讓您定義映射到數據庫表的對象。

教義似乎是PHP首選的ORM。 還有其他

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM