Что такое параметризованный запрос?

Что такое параметризованный запрос и каким может быть пример такого запроса в PHP и MySQL?


person totalnoobs    schedule 17.01.2011    source источник


Ответы (4)


Параметризованный запрос (также известный как подготовленный оператор) — это средство предварительной компиляции оператора SQL, так что все, что вам нужно предоставить, — это «параметры» (например, «переменные»), которые должны быть вставляется в оператор для его выполнения. Он обычно используется как средство предотвращения атак с внедрением SQL.

Подробнее об этом можно прочитать на странице PDO PHP (PDO является базой данных уровень абстракции), хотя вы также можете использовать их, если используете интерфейс базы данных mysqli (см. подготовить документацию).

person John Parker    schedule 17.01.2011
comment
@ RJD22 Не совсем - вы только что разместили ссылку, я нашел время, чтобы объяснить, что такое параметризованные запросы, почему они обычно используются и два способа, с помощью которых их можно использовать в PHP. Использование исключительно внешних ссылок, как правило, осуждается, поскольку они могут исчезнуть/переместиться в будущем. - person John Parker; 17.01.2011
comment
@ RJD22 Да, эпически маловероятно, что конкретная ссылка изменится. Однако дело не в этом. Stack Overflow был бы значительно менее полезным ресурсом, если бы это была просто серия внешних ссылок, и я добавил дополнительную информацию, которую вам пришлось бы довольно долго искать на сайте PHP, чтобы найти, если вы не знаете, что ищете. за. - person John Parker; 17.01.2011
comment
Разве параметризованный запрос и подготовленные операторы не отличаются друг от друга? ссылка - person Kennet Celeste; 09.12.2019
comment
@KennetCeleste Они есть; в зависимости от API вы можете выполнять параметризованные запросы, которые не подготовлены, и вы можете сделать подготовленный оператор, который содержит небезопасный встроенный пользовательский ввод. Я действительно хочу, чтобы люди перестали смешивать эти два понятия. - person marcelm; 19.07.2021

Это четкое и краткое объяснение того, что это такое и как это работает. Как и зачем использовать параметризацию [ссылка на архив]

Важно, что процесс включает в себя предварительную обработку запроса сервером без параметров, поэтому он знает тип запроса. Так, например, запрос SELECT является только запросом SELECT и не может быть объединен с параметром (переменной запроса), чтобы быть SELECT/DROP или какой-либо другой инъекцией MySql. Вместо этого данные инъекции будут просто строковыми данными в поле параметра.

person user945389    schedule 07.01.2014
comment
Ваша ссылка мертва - person Bubinga; 16.09.2020

Параметризованный запрос — это запрос, в котором для параметров используются заполнители, а значения параметров предоставляются во время выполнения.

Зачем использовать параметризованный запрос

  1. Наиболее важной причиной использования параметризованных запросов является предотвращение атак путем внедрения кода SQL.
  2. Во-вторых, параметризованный запрос заботится о сценарии, в котором запрос sql может завершиться ошибкой, например. вставка О'Бейли в поле. Параметризованный запрос обрабатывает такой запрос, не заставляя вас заменять одинарные кавычки двойными одинарными кавычками.
person Community    schedule 23.11.2016

Этот оператор является одной из особенностей системы баз данных, в которой один и тот же оператор SQL выполняется многократно с высокой эффективностью. Подготовленные операторы являются одним из видов шаблона и используются приложением с разными параметрами.Справочная статья

Система базы данных может выполнять один и тот же оператор SQL без повторного анализа, компиляции и оптимизации для одного и того же типа оператора SQL.

Вы можете написать или создать подготовленный оператор в MySQL, но это неэффективный способ, потому что бинарный протокол через API подготовленного оператора лучше.

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

Создайте подготовленный оператор в MySQL: ссылка взята из этой статьи

PREPARE TestStmt FROM 
'SELECT * FROM Test 
WHERE TestNumber=?';

Вы можете использовать PHP-код для управления подготовленным оператором через его API или управлять на уровне JDBC.

person Anvesh    schedule 01.10.2015