Я довольно новичок как для 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);
}
}
Спасибо за замечательный ответ, надели все ваши предложения на практике. У меня небольшая проблема с типом hinting (без этого он отлично работает), когда я передаю объект $ pdo, я получаю следующую ошибку: _Catchable fatal error: Аргумент 1 передан Login :: __ construct() должен быть экземпляр PDO, строка given_ Я использовал gettype, чтобы гарантировать, что передача переменной im фактически является объектом. Я озадачен ..... – Shane
Вы задаете строку как параметр. Что вам нужно сделать, так это создать экземпляр PDO вне вашего класса и предоставить этот экземпляр в качестве параметра. (Тип hinting очень силен, потому что теперь вы можете принуждать параметры к типу (классы только в этот момент).) – Styxxy
Я делаю это '$ pdo = new PDO (« $ driver: host = $ host; dbname = $ database ", $ username, $ password);' (вне класса), затем этот '$ login = new Login ($ pdo);' и когда я пытаюсь распечатать переменную, которую я передаю ($ pdo), я получаю this: _Object класса PDO не может быть преобразован в string_ – Shane