PHP

Класс обертка для PDO

Класс значительно упрощает работу с PDO, сокращает код. Реализован на статических классах и не требует создание экземпляра класса.

Но имеет и ряд недостатков:

  • Необходимо запоминать название методов.
  • При ошибке в запросе PHP покажет неправильное место где произошла ошибка, что усложняет отладку.
1

Код PHP класса

class DB
{
    public static $dsn = 'mysql:dbname=table;host=localhost';
    public static $user = 'user';
    public static $pass = 'password';

    /**
     * Объект PDO.
     */
    public static $dbh = null;

    /**
     * Statement Handle.
     */
    public static $sth = null;

    /**
     * Выполняемый SQL запрос.
     */
    public static $query = '';

    /**
     * Подключение к БД
     */
    public static function getDbh()
    {    
        if (!self::$dbh) {
            try {
                self::$dbh = new PDO(
                    self::$dsn, 
                    self::$user, 
                    self::$pass, 
                    array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES 'utf8'")
                );
                self::$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);
            } catch (PDOException $e) {
                exit('Error connecting to database: ' . $e->getMessage());
            }
        }

        return self::$dbh; 
    }

    /**
     * Добавление в таблицу, в случаи успеха вернет вставленный ID, иначе 0.
     */
    public static function add($query, $param = array())
    {
        self::$sth = self::getDbh()->prepare($query);
        return (self::$sth->execute((array) $param)) ? self::getDbh()->lastInsertId() : 0;
    }
    
    /**
     * Выполнение запроса.
     */
    public static function set($query, $param = array())
    {
        self::$sth = self::getDbh()->prepare($query);
        return self::$sth->execute((array) $param);
    }
    
    /**
     * Получение строки из таблицы.
     */
    public static function getRow($query, $param = array())
    {
        self::$sth = self::getDbh()->prepare($query);
        self::$sth->execute((array) $param);
        return self::$sth->fetch(PDO::FETCH_ASSOC);        
    }
    
    /**
     * Получение всех строк из таблицы.
     */
    public static function getAll($query, $param = array())
    {
        self::$sth = self::getDbh()->prepare($query);
        self::$sth->execute((array) $param);
        return self::$sth->fetchAll(PDO::FETCH_ASSOC);    
    }
    
    /**
     * Получение значения.
     */
    public static function getValue($query, $param = array(), $default = null)
    {
        $result = self::getRow($query, $param);
        if (!empty($result)) {
            $result = array_shift($result);
        }

        return (empty($result)) ? $default : $result;    
    }
    
    /**
     * Получение столбца таблицы.
     */
    public static function getColumn($query, $param = array())
    {
        self::$sth = self::getDbh()->prepare($query);
        self::$sth->execute((array) $param);
        return self::$sth->fetchAll(PDO::FETCH_COLUMN);    
    }
}
2

Примеры использования

DB::getRow — получение одной записи из БД

$item = DB::getRow("SELECT * FROM `category` WHERE `id` = ?", 1);
// Или
$item = DB::getRow("SELECT * FROM `category` WHERE `id` = :id", array('id' => 1));

print_r($item);
Array
(
    [id] => 1
    [parent] => 0
    [name] => Мороженое
)

DB::getAll — получение нескольких записей из БД

$items = DB::getAll("SELECT * FROM `category` WHERE `id` > 2");
print_r($items);
Array
(
    [0] => Array
        (
            [id] => 3
            [parent] => 0
            [name] => Фрукты
        )
    [1] => Array
        (
            [id] => 4
            [parent] => 0
            [name] => Ягоды
        )
    [2] => Array
        (
            [id] => 5
            [parent] => 2
            [name] => Грибы
        )
    ...
)

DB::getValue — получения значения

$value = DB::getValue("SELECT `name` FROM `category` WHERE `id` = 2");
print_r($value);
Овощи

DB::getColumn — получения значений колонки

$values = DB::getColumn("SELECT `name` FROM `category`");
print_r($values);
Array
(
    [0] => Мороженое
    [1] => Овощи
    [2] => Фрукты
    [3] => Ягоды
    [4] => Грибы
    [5] => Морепродукты
    ...
)

DB::add — добавление в БД

Метод возвращает ID вставленной записи.

$insert_id = DB::add("INSERT INTO `category` SET `name` = ?", 'Яблоки');

DB::set — все остальные запросы

Выполняет запросы в БД, такие как DELETE, UPDATE, CREATE TABLE и т.д. В случаи успеха возвращает true.

DB::set("DELETE FROM `category` WHERE `id` > ? AND `parent` > ?", array(123, 0));
14 марта 2018
В последнее время письма отправляемые с хостингов через функции mail() и mb_send_mail() часто попадают или совсем не...
cURL PHP – это библиотека предназначенная для получения и передачи данных через такие протоколы, как HTTP, FTP, HTTPS....
В статье приведены основные примеры работы с расширением PHP PDO. Такие как подключение к БД, получение, изменение и...
Библиотека GD дает возможность работать с изображениями в PHP. Далее представлены примеры как изменить размер, вырезать...