Существует множество способов предотвращения SQL-инъекций и других SQL-хаков. Вы можете легко найти его в Интернете (Google Search). Конечно, PDO - одно из хороших решений. Но я хотел бы предложить вам некоторые хорошие ссылки с помощью SQL Injection.
Что такое SQL-инъекция и как предотвратить
Руководство PHP для SQL-инъекция
Microsoft объяснение SQL-инъекции и предотвращения в PHP
и некоторые другие, подобные Предотвращение SQL-инъекций с MySQL и PHP
Теперь, почему вам нужно предотвратить запрос из SQL-инъекции?
Я хотел бы сообщить вам: почему мы пытаемся предотвратить SQL-инъекцию с помощью Ниже приведен короткий пример:
Запрос для проверки подлинности входа:
$query="select * from users where email='".$_POST['email']."' and password='".$_POST['password']."' ";
Теперь, если кто-то (хакер) помещает
$_POST['email']= admin@emali.com' OR '1=1
и пароль что-либо ....
Запрос будет анализироваться в системе только до:
$query="select * from users where email='admin@emali.com' OR '1=1';
Другая часть будет отброшена. Итак, что будет? Неавторизованный пользователь (хакер) сможет войти в систему как администратор без своего пароля. Теперь он может делать все, что может сделать администратор / адрес электронной почты. См., Очень опасно, если SQL-инъекция не предотвращается.
"Анонимным классом" я беру его, Вы имеете в виду анонимный внутренний класс .
, анонимный внутренний класс может прибыть полезный при создании экземпляра объекта с определенными "отдельно оплачиваемыми предметами", такими как методы переопределения, не имея необходимость на самом деле разделять класс на подклассы.
я склонен использовать его в качестве ярлыка для присоединения слушателя события:
button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// do something
}
});
Используя этот метод делает кодирование немного более быстрым, поскольку я не должен делать дополнительный класс, который реализует ActionListener
- я могу просто инстанцировать анонимного внутреннего класса, на самом деле не делая отдельный класс.
я только использую эту технику для "быстрых и грязных" задач, где создание всего класса чувствует себя ненужным. При наличии нескольких анонимных внутренних классов, которые делают точно, то же самое должно быть пересмотрено к фактическому классу, быть им внутренний класс или отдельный класс.
Да, анонимные внутренние классы определенно одно из преимуществ Java.
С анонимным внутренним классом у Вас есть доступ к финалу и членским переменным окружающего класса, и это пригождается в слушателях и т.д.
, Но главное преимущество состоит в том, что внутренний код класса, который является (по крайней мере, должен быть) сильно связанный к окружающему классу/методу/блоку, имеет определенный контекст (окружающий класс, метод и блок).
Вы используете его в ситуациях, где необходимо создать класс для определенной цели в другой функции, например, как слушатель, как выполнимое (для порождения потока), и т.д.
, идея состоит в том, что Вы называете их из кода функции, таким образом, Вы никогда не обращаетесь к ним в другом месте, таким образом, Вы не должны называть их. Компилятор просто перечисляет их.
Они - чрезвычайно синтаксический сахар и должны обычно перемещаться в другое место, поскольку они становятся больше.
я не уверен, является ли это одно из преимуществ Java, хотя при использовании их (и все мы часто используем их, к сожалению), тогда Вы могли утверждать, что они - тот.
Они являются наиболее часто используемыми как подробная форма обратного вызова.
я предполагаю, что Вы могли сказать, что они - преимущество по сравнению с не наличием их и необходимостью создать именованный класс, каждый раз, но подобные понятия реализован намного лучше на других языках (как закрытия, или блоки)
Вот пример колебания
myButton.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
// do stuff here...
}
});
, Хотя это является все еще грязно подробным, это намного лучше, чем то, чтобы вынуждать Вас определить именованный класс для каждого выбрасывать слушателя как это (хотя в зависимости от ситуации и повторного использования, которое может все еще быть лучшим подходом)
Я иногда использую их в качестве взлома синтаксиса для инстанцирования Карты:
Map map = new HashMap() {{
put("key", "value");
}};
по сравнению с
Map map = new HashMap();
map.put("key", "value");
Это сохраняет некоторое дублирование при выполнении большого количества помещенных операторов. Однако я также столкнулся с проблемами, делающими это, когда внешний класс должен быть сериализирован через дистанционную работу.
Анонимные внутренние классы являются эффективно закрытиями, таким образом, они могут использоваться для эмуляции лямбда-выражений или "делегатов". Например, возьмите этот интерфейс:
public interface F<A, B> {
B f(A a);
}
можно использовать это анонимно для создания первоклассная функция в Java. Скажем, у Вас есть следующий метод, который возвращает первое число, больше, чем я в данном списке или мне, если никакое число не больше:
public static int larger(final List<Integer> ns, final int i) {
for (Integer n : ns)
if (n > i)
return n;
return i;
}
И затем у Вас есть другой метод, который возвращает первое число, меньшее, чем я в данном списке или мне, если никакое число не меньше:
public static int smaller(final List<Integer> ns, final int i) {
for (Integer n : ns)
if (n < i)
return n;
return i;
}
Эти методы почти идентичны. Используя первоклассный функциональный тип F, мы можем переписать их в один метод следующим образом:
public static <T> T firstMatch(final List<T> ts, final F<T, Boolean> f, T z) {
for (T t : ts)
if (f.f(t))
return t;
return z;
}
можно использовать анонимный класс для использования firstMatch метода:
F<Integer, Boolean> greaterThanTen = new F<Integer, Boolean> {
Boolean f(final Integer n) {
return n > 10;
}
};
int moreThanMyFingersCanCount = firstMatch(xs, greaterThanTen, x);
Это - действительно изобретенный пример, но ее легкое, чтобы видеть, что способность раздать функции, как будто они были значениями, является довольно полезной функцией. См. , "Может Ваш Язык программирования Делать Это" самим Joel.
А хорошая библиотека для программирования Java в этом стиле: Функциональный Java.