我很新的PHP面向對象編程,以便在想,如果我能我創建了一個數據庫對象上得到一些好的建議。PDO和PHP的OOP代碼意見
我打電話給db並將我的類包含到每個頁面加載中,並啓動數據庫對象using $db = new db
。然後,我根據自己想要做的事情,針對每個可能需要的操作(從數據庫構建菜單,獲取登錄信息等)調用此方法。
它需要它的第一個參數作爲與查詢?符號作爲我想要綁定的值的替換,第二個參數是在數組中將值綁定到它的值,然後再通過prepared_statement方法循環,第三個參數是類型(FETCH_ARRAY返回SELECT語句行的數組, NUM_ROWS返回受影響的行數,INSERT返回最後插入的ID)。
的我怎麼會調用這個函數下面是一個例子:
$db->prepared_execute("SELECT * FROM whatever WHERE ? = ? ", array('password', 'letmein'), NUM_ROWS);
第二個和第三個參數是可選的,如果沒有被綁定的參數或無需返回。
由於我是新來OOP,我發現很難讓我的頭周圍什麼時候正確地使用,什麼是公共的,私人的,靜態函數/變量和設計模式(辛格爾頓等)。
我已經閱讀了很多教程,只要我有,但我覺得現在我需要在這裏獲得進一步的答案或建議下一步與OOP和我已經建成的類。
它的工作原理,因爲它是這對我來說是除了任何錯誤處理,我將在明年增加一個很好的起點,但我要確保我不會在這裏做任何明顯的設計錯誤。
該類的代碼如下:
class db {
var $pdo;
public function __construct() {
$this->pdo = new PDO('mysql:dbname=' . DB_NAME . ';host=' . DB_HOST . ';charset=utf8', DB_USER, DB_PASS);
$this->pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
$this->pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}
public function prepared_execute($query, $bind_values = null, $type = null) {
$preparedStatement = $this->pdo->prepare($query);
if($bind_values) {
$i = 1;
foreach($bind_values as $bind_value) {
$preparedStatement->bindValue($i, $bind_value);
$i++;
} }
$preparedStatement->execute();
if( $type == FETCH_ARRAY) { return $preparedStatement->fetchAll(); }
elseif($type == NUM_ROWS) { return $preparedStatement->rowCount(); }
elseif($type == INSERT ) { return $this->pdo->lastInsertId(); }
else{ return true; }
}
非常感謝你的迴應!我會花時間仔細閱讀這些內容,並檢查您發佈的鏈接,如果我有任何問題,請告訴我們,但非常感謝您的反饋意見,這正是我一直在尋找的內容。 – 2013-03-23 01:31:11