Как можно улучшить класс для работы с PDO? Доброго времени суток, некоторое время назад написал класс для работы с PDO.
Прошу оценить знатаков, хотелось бы адекватной критики, почему плохо, и как исправить.
Возможно где то лишний код, который можно заменить одной строкой, итд. true));
self::$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
self::$db->exec('SET names utf8');
} catch(PDOException $e) {
self::$connection_status = FALSE;
self::$error_text = $e->getMessage();
}
}

public static function GetConnectionStatus() {
return self::$connection_status;
}

public static function GetConnectionError() {
return self::$error_text;
}

public static function getInstance($db_host, $db_name, $db_user, $db_password) {
if (!(self::$_instance instanceof self)) {
self::$_instance = new self($db_host, $db_name, $db_user, $db_password);
}
return self::$_instance;
}

public static function exec($query) {
return self::$db->exec($query);
}

public static function query($query) {
return self::$db->query($query);
}

public static function insert($table, $params) {
foreach($params as $key => $value) {
$keys[] = $key;
$statemans[] = ":$key";
}
$result = self::$db->prepare("INSERT INTO `".$table."` (".implode(', ', $keys).") VALUES (".implode(', ', $statemans).");");
return $result->execute($params);
}

public static function update($table, $updating, $where) {
$i = 0;
$list = '';
foreach($updating as $key => $value) {
$i++;
if ($i $value) {
$i++;
if ($i prepare($sql);
foreach($updating as $key => $value) {
$result->bindValue(':'.$key, $value);
}
foreach($where as $key => $value) {
$result->bindValue(':'.$key, $value);
}
return $result->execute();
}

public static function delete($table, $where) {
$i = 0;
$list = '';
foreach($where as $key => $value) {
$i++;
if ($i prepare("DELETE FROM `".$table."` WHERE $list");
return $result->execute($where);
}

public static function select($table, $select, $params) {
$i = 0;
$list = '';
foreach($params as $key => $value) {
$i++;
if ($i prepare("SELECT ".$select." FROM `".$table."` WHERE $list");
$result->execute($params);
return $result->fetchAll();
}

public static function count($query) {
$result = self::$db->query($query);
return $result->rowCount();
}

public static function addslashes($str) {
return addslashes($str);
}

private function __clone() {}
private function __wakeup() {}
}

// Подключение к БД
$object = PdoDatabase::getInstance('localhost', 'laravel', 'root', 'root');

// Проверка статуса подключения
$result = PdoDatabase::GetConnectionStatus();
if ($result) {
echo 'Connection sucsess ';

// Использование любомого метода
echo PdoDatabase::delete('articles', array('id' => 16));
} else {
// Получение ошибки подключения, в случае ее наличия
echo PdoDatabase::GetConnectionError();
}

21 Авг 2019 в 07:06
191 +1
0
Ответы
1

Избавиться от статических методов и переменных. Использование статики делает класс менее гибким и затрудняет тестирование. Вместо этого, можно создать экземпляр класса в методе getInstance и работать с ним.

Добавить возможность передавать параметры запроса через подготовленные запросы, чтобы избежать SQL инъекций. Для этого нужно использовать методы bindParam или bindValue.

Разделить код на более мелкие методы. Например, вынести формирование условий WHERE и SET в отдельные методы.

Обработать случаи, когда запрос не выполнен успешно (например, в методах insert, update, delete).

Обработать ошибки запросов в методе query и exec, чтобы возвращать более понятную информацию о возникшей проблеме.

Добавить возможность работы с транзакциями для обеспечения целостности данных.

Пересмотреть методы select и count, возможно, объединить их в один метод с параметрами, определяющими тип выполнения операции.

Добавить методы для работы с множественными INSERT и UPDATE запросами, чтобы улучшить производительность при массовом добавлении или обновлении данных.

Провести тестирование класса на различных сценариях использования, чтобы удостовериться в его надежности и эффективности.

Улучшить комментарии к методам класса, чтобы лучше понимать их функциональность.

20 Апр в 13:07
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 84 683 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир