Используя эту функцию PHP mysql_escape_string()
, вы можете быстро получить хорошую профилактику.
Например:
SELECT * FROM users WHERE name = '".mysql_escape_string($name_from_html_form)."'
mysql_escape_string
- Сбрасывает строку для использования в mysql_query
Для большей профилактики вы можете добавить в конце ...
wHERE 1=1 or LIMIT 1
Наконец вы получаете:
SELECT * FROM users WHERE name = '".mysql_escape_string($name_from_html_form)."' LIMIT 1
Вид! В городе существует новая идиома, который хорош и может помочь Вам в некоторых случаях. Это не полностью, что Вы хотите, но иногда я думаю, что Вам понравится он.
Так как подчеркивание (" _ ") является допустимым идентификатором C#, это становится общей идиомой для использования его в качестве названия параметра к лямбде в случаях, где Вы планируете проигнорировать параметр так или иначе. Если другие кодеры будут знать об идиоме, то они будут сразу знать, что параметр не важен.
Например:
ExternalId.IfNotNullDo( _ => ExternalId=ExternalId.Trim());
Легкий ввести, передает Ваше намерение, и легче на глазах также.
Конечно, при передаче лямбды чему-то, что ожидает дерево выражений, это не может работать, потому что теперь Вы передаете лямбду с одним параметром вместо лямбды без параметров.
Но для многих случаев, это - хорошее решение.
Для лямбды, нет: Вам нужно () =>
, он для делегата или выражения? Для делегатов другая опция delegate {...}
. Это может или не может быть желательно, в зависимости от сценария. Это - больше ключей, конечно...
В некоторых случаях (не этот) можно использовать целевой метод непосредственно - т.е.
ExternalId.IfNotNullDo(SomeMethod);
Нет, нет. Лямбда-выражения оптимизированы (с точки зрения синтаксиса) для единственного случая параметра.
я знаю, что команда C# чувствует Вашу боль и попыталась найти альтернативу. Будет ли когда-нибудь один или не другой разговор.
По существу то, что Вы ищете, является инверсией ??
пустой оператор объединения (который называют Nullable<T>.GetValueOrDefault()
под покрытиями) - проблемой является C#, не предоставляет аккуратный ответ OOTB.
не знают точно, что Вы делаете, но как Вы делаете:
ExternalId.IfNotNullDo(()=>ExternalId=ExternalId.Trim());
Вы могли бы также найти использование для:
class NullExtensions
{
public T DefaultOr<T>( this T that, Func<T> transform)
{
return that!=default(T) ? transform(that) : default(T);
}
}
, который включил бы:
var result = input.DefaultOr( _ => _.Trim());
(в целом, я попытался бы держаться далеко от многократного использования / видоизменяющиеся переменные, поскольку Вы, кажется, делаете и вместо этого входите в Представлять Объяснение Переменной / направление Временной переменной Разделения т.е. используете новую переменную, а не value = value.DefaultOr( _ => _.Trim());
)