Правильно ли написан класс для работы с базой данных? Собственно сам класс:class DB { private $dbprefix; private $mysqli; private $connect = true; function __construct() { $config = new Config(); $this->dbprefix = $config->dbprefix; if ($this->connect) { $mysqli = new mysqli($config->host, $config->user, $config->password, $config->db); $mysqli->set_charset("utf8"); if ($mysqli->connect_errno) { echo "Не удалось подключиться к MySQL: (" . $mysqli->connect_errno . ") " . $mysqli->connect_error; exit(); } $this->mysqli = $mysqli; $this->connect = false; } }
public function query($data) { $data = preg_replace('/#_/i', $this->dbprefix, $data); return $this->mysqli->query($data); }
public function result() { return $this->mysqli; } } Готовые решения не интересны, хочу изучить данный вопрос самостоятельно.Вопросы: 1. Не создаёт ли такой класс несколько подключений к БД и если создаёт, как их предотвратить? 2. Данный функционал класса написан грамотно? (других функций для работы с бд мне ненужно, всё что нужно описано выше)
Да, данный класс создает новое подключение к базе данных каждый раз, когда создается новый объект класса DB. Это может вызвать проблемы с производительностью и использованием ресурсов. Чтобы предотвратить создание нескольких подключений, можно использовать шаблон Singleton, который обеспечит наличие только одного экземпляра класса DB.
В целом функционал класса написан верно, но есть несколько моментов, которые можно улучшить:
В методе insert_query необходимо объявить переменные $field и $value перед их использованием.Для безопасности лучше использовать подготовленные запросы (prepared statements) вместо непосредственной вставки данных в запросы для защиты от SQL-инъекций.Необходимо добавить обработку ошибок и исключений при выполнении запросов к базе данных, чтобы обработать возможные ошибки.Можно добавить методы для закрытия соединения с базой данных и выполнения других операций, которые могут потребоваться в будущем.
Да, данный класс создает новое подключение к базе данных каждый раз, когда создается новый объект класса DB. Это может вызвать проблемы с производительностью и использованием ресурсов. Чтобы предотвратить создание нескольких подключений, можно использовать шаблон Singleton, который обеспечит наличие только одного экземпляра класса DB.
В целом функционал класса написан верно, но есть несколько моментов, которые можно улучшить:
В методе insert_query необходимо объявить переменные $field и $value перед их использованием.Для безопасности лучше использовать подготовленные запросы (prepared statements) вместо непосредственной вставки данных в запросы для защиты от SQL-инъекций.Необходимо добавить обработку ошибок и исключений при выполнении запросов к базе данных, чтобы обработать возможные ошибки.Можно добавить методы для закрытия соединения с базой данных и выполнения других операций, которые могут потребоваться в будущем.