Класс PDO php

123
totamon
На сайте с 12.05.2007
Offline
437
#11
LEOnidUKG #:

расскажите это разработчикам WP бедные, как живут без них :)

ты лет на 10 отстал, ВП самая ООП CMS...
Домены и хостинг https://8fn.ru/regru | Дедик от 3000р https://8fn.ru/73 | VPS в Москве https://8fn.ru/72 | Лучшие ВПС, ТП огонь, все страны! https://8fn.ru/inferno | ХОСТИНГ №1 РОССИИ https://8fn.ru/beget
D
На сайте с 28.06.2008
Offline
1114
#12
Дикий пионер #:

Я бы глянул как это в Doctrine DBAL сделано (именно DBAL, a не ORM)

https://www.doctrine-project.org/projects/doctrine-dbal/en/latest/reference/data-retrieval-and-manipulation.html#delete - интерфейс простейший, как по мне

Один фиг на выходе я получаю писанину много большего кол-ва строк и неудобств чем было ДО.

В процедурном стиле я тратил 5 строк кода на подключения к базе

$database = ''; 
$user = '';
$password = '';
$conn = new PDO("mysql:host=localhost;dbname=" . $database . ";charset=UTF8", $user, $password);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

и далее только строки выполнения запроса по типу

        $sql = "INSERT INTO `proxy` (`id`, `name`, `time`, `capcha`, `error`, `count`) VALUES (NULL, '{$line}', '{$time}', '0', '0', '0');";
        $conn->query($sql);

Оставалось только думать какие переменные нужно экранировать.

Я же хотел потратить время, написать класс работы с базой данных, чтобы он помог мне перестать думать об экранировании и безопасности, но что еще важно - не усложняя написания самих запросов.

Оказалось так нельзя и вероятно опять придется отложить ООП на полочку ))

D
На сайте с 28.06.2008
Offline
1114
#13

Наговнокодил через регулярку, вроде работает как я хотел

        if (preg_match('~(^UPDATE|^INSERT)~m', $str, $str_arr)){
        $str = preg_replace_callback("~(,('|\s+'))((.*))'(\s+,|,\)|\s+\)|,)~mU ", function($matches) {
            return ", '" . addslashes($matches[3]) . "',";
            },$str);
            var_dump($str);
            return $this->conn->exec($str);
        }
LEOnidUKG
На сайте с 25.11.2006
Offline
1773
#14
totamon #:
ты лет на 10 отстал, ВП самая ООП CMS...


Да, мой промах, там 50/50.

В любой случаи, ООП хорош в большом проекта и особенно когда им занимаются много людей.

Насчёт обвёртки Mysql, её нужно делать на больших проектах обязательно, хотя бы просто запросов. Чтобы потом можно было делать мониторинг запросов для поиска узких мест.

✅ Мой Телеграм канал по SEO, оптимизации сайтов и серверов: https://t.me/leonidukgLIVE ✅ Качественное и рабочее размещение SEO статей СНГ и Бурж: https://getmanylinks.ru/ ✅ Настройка и оптимизация серверов https://getmanyspeed.ru/
S3
На сайте с 29.03.2012
Offline
366
#15
totamon #:
ты лет на 10 отстал, ВП самая ООП CMS...

Нууу, такое себе там ООП... Создать глобальную переменную и потом тянуть ее везде))) 

K9
На сайте с 16.01.2020
Offline
18
#16
Dram #:

Наговнокодил через регулярку, вроде работает как я хотел

По-моему какая то ерунда, почему бы не использовать стандартные методы PDO. Для удобства я всегда использую такой класс

class MyPDO
{
public static string $host = 'localhost';
static function dbh($charset = '')
{
$stmt = new PDO("mysql:host=".self::$host.";dbname=xxx", "xxx", "xxx", [
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
]);
if (!empty($charset)) {
$stmt->exec("set names '$charset'");
}
return $stmt;
}
}



Далее подключаю и использую в любом месте где захочется.

$stmt = MyPDO::dbh()->prepare("SELECT * FROM table WHERE id = ?");
$stmt->execute([$id]);
$res = $stmt->fetch();

По-моему не сложно написать три строчки. И так легче читается.

D
На сайте с 28.06.2008
Offline
1114
#17
kuzma-95 #:
По-моему не сложно написать три строчки. И так легче читается.

Как правило у меня сложные запросы бывает несколько десятков переменных и в итоге получится 100500 строк. К сожалению не вижу упрощения лично для себя.

Мой говнокод выше к сожалению тоже нормально работает только с одной переменной.... ПОка не нашел нормальных вариантов.

S3
На сайте с 29.03.2012
Offline
366
#18

У нас(в пайтоне) твоя проблема решается через миддлвари и провайдеры, абстрактные классы. Подключение к БД - отдельно, провайдеры для различных запросов, абстракйии для целостности, например.

Не думаю что это нельзя реализовать средствами пхп

M
На сайте с 04.12.2013
Offline
223
#19
Sly32 #:
Нууу, такое себе там ООП... Создать глобальную переменную и потом тянуть ее везде)))
Конечно, лучше притянуть вагон и маленькую тележку вместо глоб. переменной. Чтобы всем было видно, что это ООП 😊
Домены и скрипт для коротких ссылок: https://u75.ru/domains-for-shortcuts
S3
На сайте с 29.03.2012
Offline
366
#20
miketomlin #:
Чтобы всем было видно, что это ООП

ну если для тебя ООП тока что было видно - то ты не понимаешь зачем все это. Говнокодят, а потом вот эта рекомендация в ВП - в именах плагинов префиксы использовать) 

Я ни в коем разе не навязываю свою точку видения, но работа в больших проектах заставляет по другому смотреть

123

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий