- Поисковые системы
- Практика оптимизации
- Трафик для сайтов
- Монетизация сайтов
- Сайтостроение
- Социальный Маркетинг
- Общение профессионалов
- Биржа и продажа
- Финансовые объявления
- Работа на постоянной основе
- Сайты - покупка, продажа
- Соцсети: страницы, группы, приложения
- Сайты без доменов
- Трафик, тизерная и баннерная реклама
- Продажа, оценка, регистрация доменов
- Ссылки - обмен, покупка, продажа
- Программы и скрипты
- Размещение статей
- Инфопродукты
- Прочие цифровые товары
- Работа и услуги для вебмастера
- Оптимизация, продвижение и аудит
- Ведение рекламных кампаний
- Услуги в области SMM
- Программирование
- Администрирование серверов и сайтов
- Прокси, ВПН, анонимайзеры, IP
- Платное обучение, вебинары
- Регистрация в каталогах
- Копирайтинг, переводы
- Дизайн
- Usability: консультации и аудит
- Изготовление сайтов
- Наполнение сайтов
- Прочие услуги
- Не про работу
Что делать, если ваша email-рассылка попала в спам
10 распространенных причин и решений
Екатерина Ткаченко
Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий
Я, когда мне нужно, пишу простые скрипты в процедурном стиле.
Решил все же заставить себя использовать ООП. Придумал написать класс для работы с БД, так как чаще всего мои скрипты работают с базой.
Наваял такое
Проверил SELECT запросы, все работает. Ну думаю, дальше нужно как-то разделить запросы, добавил разделение через регулярку. Чувствую что уже пахнет говнокодом...
Вопрос №1- может есть встроенные функции понимающие сразу что за тип запроса пришел в класс?
Протестировал запросы - все работает. Далее мысля пошла - нужно защититься от SQL инъекций и добавить экранирование кавычек (наиболее частое что я использую).
И вот тут я завис.
Моя хотелка была написать универсальный класс, принимающий три вида запросов SELECT/UPDATE/INSERT (не важно какие они и что делают), чтобы они обрабатывались (экранировались) и выполнялись.
Но получается на входе у меня строка целикового запроса и ее фиг правильно экранируешь?
Вот так я пробовал проверять
Получается не получится написать такой универсальный класс как хотел?
В классе сделай отдельные функции для SELECT/UPDATE/INSERT и др. какие нужны будут
В этих функциях используй подготовленный запрос prepare и экранировать ничего не надо будет
Для использования $BD->Insert($table,'id,name,url, sid',$value);
где $table - имя таблицы;
id,name,url, sid - поля для вставки;
$value - массив значений.
В функции формируешь запрос, выполняешь и отдаёшь результат, дальше по обстановке. И остальные функции в такой же манере.
Но получается на входе у меня строка целикового запроса и ее фиг правильно экранируешь?
PDOStatement::executeКласс PDO обвернём ещё в один класс! А потом напишем подклассы, чтобы везде были классы 🤣
На первый взгляд конечно тем кто не использует классы такой подход кажется бредовым, мне по началу тоже не нравилось.
Но прелесть классов в том, что они подключаются по мере надобности автозагрузчиком, один раз написал и когда нужно присвоил переменной класс(который подтягивает нужные ему классы, но в основном коде это лишь одна строчка) и используешь его методы.
Как-то общался с одним в скайпе, тот вообще не использует классы, так у него такие портянки(огромные файлы) кода жуть..
На первый взгляд конечно тем кто не использует классы такой подход кажется бредовым, мне по началу тоже не нравилось.
Но прелесть классов в том, что они подключаются по мере надобности автозагрузчиком, один раз написал и когда нужно присвоил переменной класс и используешь его методы.
Как-то общался с одним в скайпе, тот вообще не использует классы, так у него такие портянки(огромные файлы) кода жуть..
расскажите это разработчикам WP бедные, как живут без них :)
Спасибо за ответы - но все что предложили выше вроде бы не универсально. Insert ведь разные бывают в разные таблицы, разное кол-во полей, условия там разные....
По сути мне нужно просто экранирование кавычек но ДЛЯ ЛЮБОГО запроса пришедшего в класс. Так можно сделать?
По сути мне нужно просто экранирование кавычек но ДЛЯ ЛЮБОГО запроса пришедшего в класс. Так можно сделать?
Вам же Marat_Kh показал образец подготовленного запроса. PDO уже позаботилось чтобы не было SQL инъекций, надо делать подготовленный запрос.
То есть сначала формируется запрос с переменными вида :name далее PDO проверяет запрос и если всё хорошо подставляете вместо переменных данные.
расскажите это разработчикам WP бедные, как живут без них :)
печалька.. 😂
Вам же Marat_Kh показал образец подготовленного запроса. PDO уже позаботилось чтобы не было SQL инъекций, надо делать подготовленный запрос.
То есть сначала формируется запрос с переменными вида :name далее PDO проверяет запрос и если всё хорошо подставляете вместо переменных данные.
печалька.. 😂
Про подготовленные запросы я прочитал, но в итоге получится в 2 раза больше строк чем я обычно пишу.
Хотелось бы наоборот упростить себе задачу, а не усложнить, при этом козыряя - вот дескать на ООП пишу )))
Я бы хотел писать такие запросы типы
и не думать каждый раз, а что там в переменной, надо ли экранировать - чтобы класс сам все экранировал, без танцев с подготовленными запросами.
Нельзя так?
Нельзя так?
Нет, так нельзя. Хотите по старинке используйте execute или не PDO а MySQLi и экранируйте кавычки.. Но это не даст полной гарантии от взлома.
Всё же лучше изучите современные подходы и тогда то что сейчас кажется трудным, непонятным, будет лучшим решением для вас.
Я бы глянул как это в Doctrine DBAL сделано (именно DBAL, a не ORM)
https://www.doctrine-project.org/projects/doctrine-dbal/en/latest/reference/data-retrieval-and-manipulation.html#delete - интерфейс простейший, как по мне