我對PDO和OOP都很新穎。我試圖編寫一個連接到數據庫的類並更新插入並修改它。我有幾個問題:PHP PDO類構造
在構造函數中連接數據庫的好習慣?
一個類應該更新,插入,修改和連接,還是應該分成幾個類?
爲什麼runQuery不起作用?我認爲它是因爲$ pdo是在不同的範圍內定義的。我將如何得到這個工作?
如果該類包含在每個頁面的頂部,那麼這意味着每次加載新頁面時都會重新連接到數據庫,並且會導致安全問題?
對於問題超載的道歉。預先感謝任何答案。
<?php
class Login{
private $_username;
private $_password;
private $_host;
private $_database;
private $_driver;
//Connect to the database
function __construct($configFile){
$connectionDetails = parse_ini_file($configFile);
$this->_username = $connectionDetails['username'];
$this->_password = $connectionDetails['password'];
$this->_host = $connectionDetails['host'];
$this->_database = $connectionDetails['database'];
$this->_driver = $connectionDetails['driver'];
$pdo = new PDO("$this->_driver:host=$this->_host;dbname=$this->_database", $this->_username, $this->_password);
}
public function loginAllowed($user, $pw){
$sth = $pdo->setFetchMode(PDO::FETCH_ASSOC);
print_r($sth);
}
public function runQuery($query, $params){
$sth = $this->pdo->prepare($query);
$sth->execute($params);
}
}
感謝您的真棒答案即時通訊將您的所有建議付諸實踐。當我通過$ pdo對象時,我遇到了類型提示的一個小問題(出現這種情況),出現以下錯誤: _Catchable致命錯誤:傳遞給Login :: __ construct()的參數1必須是PDO實例,字符串給定_ 我已經使用gettype來確保變量im傳遞實際上是一個對象。我很困惑..... – Shane
你給一個字符串作爲參數。你必須做的是在你的類之外創建一個PDO實例,並將這個實例作爲參數。 (類型提示是非常強大的,因爲你現在可以強制參數是一個類型(只在這個時候纔有類)。) – Styxxy
我這樣做:$ pdo = new PDO(「$ driver:host = $ host; dbname = $ database「,$ username,$ password);'(在類之外),那麼這個'$ login = new Login($ pdo);'當我嘗試打印變量時,我傳遞($ pdo)這:PDO類的_Object無法轉換爲string_ – Shane