Задумка хорошая, но реализация не очень.
Начнем с того, что это очень нелогичный класс.
Как им вообще пользоваться, если функция row() возвращает не одну строку, а все?
В классе куча лишнего кода, но при этом 90% функциональности ПДО в нем просто недоступно
Класс надо переписать хотя бы так:
class Db {
public $db;
public function __construct() {
$config = require __DIR__.'/config.php';
$options = [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_EMULATE_PREPARES => false,
];
$dsn = 'mysql:host='.$config['host'].';charset=utf8;dbname='.$config['name'];
$this->db = new PDO($dsn, $config['user'], $config['password'], $options);
}
public function query($sql, $params = []) {
$stmt = $this->db->prepare($sql);
$stmt->execute($params);
return $stmt;
}
public function cell($sql, $params = []) {
return $this->query($sql, $params)->fetchColumn();
}
public function row($sql, $params = [], $mode=PDO::FETCH_ASSOC) {
return $this->query($sql, $params)->fetch($mode);
}
public function all($sql, $params = [], $mode=PDO::FETCH_ASSOC) {
return $this->query($sql, $params)->fetchAll($mode);
}
public function column($sql, $params = []) {
return $this->query($sql, $params)->fetchAll(PDO::FETCH_COLUMN);
}
public function lastInsertId() {
return $this->db->lastInsertId();
}
}
после того как ВЕСЬ функционал PDO будет добавлен, можно будет сделать db обратно приватной. А до те х пор вызывать через неё недостающие функции ПДО.
А подключать объект этого класса проще пареной репы:
просто предать в функцию
include 'Db.php';
$db = new Db;
addUser($db, 123, 111111111);
function addUser($db, $user_id, $date) {
$params = [
'user_id' => $user_id,
'date' => $date,
];
$db->query('INSERT INTO users (user_id, date) VALUES (:name, :date)', $params);
return $db->lastInsertId();
}