Что такое параметризованный запрос? - PullRequest
20 голосов
/ 17 января 2011

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

Ответы [ 4 ]

20 голосов
/ 17 января 2011

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

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

2 голосов
/ 23 ноября 2016

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

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

  1. Наиболее важной причиной использования параметризованных запросов является предотвращение атак с использованием SQL-инъекций.
  2. Второй параметризованный запрос заботится о сценарии, где SQL-запрос может завершиться неудачей, например, вставка O'Baily в поле. Параметризованный запрос обрабатывает такой запрос, не заставляя вас заменять одинарные кавычки на двойные одинарные.
2 голосов
/ 07 января 2014

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

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

1 голос
/ 01 октября 2015

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

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

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

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

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

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

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

...