Да, вы можете предположить, что пользовательская переменная занимает место одного скалярного значения в запросе, как заполнитель связанного параметра. Это эффективная защита от внедрения SQL.
Подтверждение: попробуйте выполнить SQL-инъекцию, используя переменную пользователя.
SET @s = 'Robert''; DROP TABLE Students;--';
SELECT * FROM Students WHERE name = @s;
Это НЕ сбросить таблицу. Это, вероятно, ничего не возвращает, потому что нет ученика с таким странным длинным именем (если вы не ходите в школу с Little Bobby Tables ).
Однако мне интересно, будет ли такой запрос:
SELECT ...
WHERE
table.field1 = @param1 OR
table.field2 = @param1 OR
table.field3 = @param1
Указывает, что field1, field2 и field3 действительно должны быть одним полем в дочерней таблице. Если вы ищете одно и то же значение в нескольких столбцах, это может быть повторяющаяся группа. Например, если это phone1, phone2, phone3, это многозначный атрибут, который должен храниться в одном столбце над несколькими строками в дочерней таблице. Тогда вы можете искать с одним параметром.