Answer the question
In order to leave comments, you need to log in
How can the class be improved to work with PDO?
Good day, some time ago I wrote a class for working with PDO.
I ask you to evaluate the experts, I would like adequate criticism, why it's bad, and how to fix it.
Perhaps somewhere there is extra code that can be replaced with one line, etc.
<?php
/**
* @GetConnectionStatus Возвращает состояние подключения (TRUE либо FALSE)
* @GetConnectionError Возвращает ошибку подключения, в случае ее наличия (Возвращает строку либо NULL)
* @getInstance Метод паттерна singleton, проверающий создан ли обьект класса (Инициализируем класс с его помощью)
* @exec Запускает SQL запрос на выполнение и возвращает количество строк, задействованых в ходе его выполнения.
* @query выполняет SQL запрос без подготовки и возвращает результирующий набор (если есть) в виде объекта PDOStatement.
* @insert Добавляет строку в указанную таблицу, входящие данные название таблицы, и массив с данными, на выходе BOOLEAN
* @update Обновление строки, входящие данные название таблицы, массив с данными для WHERE, и массив с данными для изминения
* @select Функция получения данных из таблицы в форме массива, на входе таблица, столбцы для получения (через запятую), и массив с WHERE данными
* @delete функция удаления строки из таблицы, первый параметр это таблица, второй WHERE массив
* @count Функция выдающее количество строк по указанному SQL запросу
* @addslashes экранирование
*/
Class PdoDatabase
{
protected static $_instance = NULL;
protected static $db = NULL;
protected static $connection_status = TRUE;
protected static $error_text = NULL;
private function __construct($db_host, $db_name, $db_user, $db_password) {
try {
self::$db = new PDO('mysql:host='.$db_host.';dbname='.$db_name.'', $db_user, $db_password, array(PDO::ATTR_PERSISTENT => 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 < count($updating)) {
$list .= "$key=:$key, ";
} else {
$list .= "$key=:$key";
}
}
$i = 0;
$where_list = '';
foreach($where as $key => $value) {
$i++;
if ($i < count($where)) {
$where_list .= "$key=:$key AND ";
} else {
$where_list .= "$key=:$key";
}
}
$sql = "UPDATE `".$table."` SET ".$list." WHERE ".$where_list."";
$result = self::$db->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 < count($where)) {
$list .= ":$key = $key AND ";
} else {
$list .= ":$key = $key";
}
}
$result = self::$db->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 < count($params)) {
$list .= ":$key = $key AND ";
} else {
$list .= ":$key = $key";
}
}
$result = self::$db->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 <br>';
// Использование любомого метода
echo PdoDatabase::delete('articles', array('id' => 16));
} else {
// Получение ошибки подключения, в случае ее наличия
echo PdoDatabase::GetConnectionError();
}
Answer the question
In order to leave comments, you need to log in
Didn't find what you were looking for?
Ask your questionAsk a Question
731 491 924 answers to any question