Правильно ли написан класс для работы с базой данных? Собственно сам класс: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 insert_query($name, $data) {
foreach($data as $key => $val){
$field .= '`'.$this->result()->real_escape_string($key).'`, ';
if (is_numeric($val)) {
$value .=' '.$this->result()->real_escape_string($val).', ';
} else {
$value .=' \''.$this->result()->real_escape_string($val).'\', ';
}
}
$name = preg_replace('/#_/i', $this->dbprefix, $name);
$name = $this->result()->real_escape_string($name);
$this->mysqli->query('INSERT INTO `'.$name.'` ('.rtrim($field, ', ').') VALUES ('.rtrim($value, ', ').')');
return $this->mysqli->insert_id;
}

public function result() {
return $this->mysqli;
}
}
Готовые решения не интересны, хочу изучить данный вопрос самостоятельно.Вопросы:
1. Не создаёт ли такой класс несколько подключений к БД и если создаёт, как их предотвратить?
2. Данный функционал класса написан грамотно? (других функций для работы с бд мне ненужно, всё что нужно описано выше)

21 Авг 2019 в 07:03
146 +1
0
Ответы
1

Да, данный класс создает новое подключение к базе данных каждый раз, когда создается новый объект класса DB. Это может вызвать проблемы с производительностью и использованием ресурсов. Чтобы предотвратить создание нескольких подключений, можно использовать шаблон Singleton, который обеспечит наличие только одного экземпляра класса DB.

В целом функционал класса написан верно, но есть несколько моментов, которые можно улучшить:

В методе insert_query необходимо объявить переменные $field и $value перед их использованием.Для безопасности лучше использовать подготовленные запросы (prepared statements) вместо непосредственной вставки данных в запросы для защиты от SQL-инъекций.Необходимо добавить обработку ошибок и исключений при выполнении запросов к базе данных, чтобы обработать возможные ошибки.Можно добавить методы для закрытия соединения с базой данных и выполнения других операций, которые могут потребоваться в будущем.
20 Апр в 13:08
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 84 727 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир