Да Подготовленный оператор здесь предотвратит внедрение SQL.Это потому, что вы используете заполнитель (?) В запросе.Это заполнитель, который важно отметить здесь.
Ниже приведены 2 примера подготовленных высказываний.Первый не помешает внедрению sql.
PreparedStatement ps = conn.prepareStatement ("SELECT * FROM users WHERE firstname LIKE" + name);
Вышеприведенный оператор, даже если он подготовленОператор не помешает SQL-инъекциям
Однако подготовленный ниже оператор хорош для предотвращения SQL-инъекций.
PreparedStatement ps = conn.prepareStatement («ВЫБРАТЬ * ОТ ПОЛЬЗОВАТЕЛЕЙ, ГДЕ ИМ НРАВИТСЯ?»);
Различие между первым и вторым утверждением заключается в том, что запрос в первом случае имеет виддинамически компилируется во время выполнения, но во втором случае он предварительно компилируется.
Это означает, что злонамеренный пользовательский ввод, такой как (a'or'1 '=' 1), может изменить запрос в первом операторе.Но второй запрос, поскольку он предварительно скомпилирован, будет обрабатывать злонамеренный пользовательский ввод как данные, а не как команду sql.
В выражениях Prehellred в словах можно предотвратить SQL-инъекцию тогда и только тогда, когда они используются с заполнителями и параметрами связывания.