Scala combinator синтаксические анализаторы - различает числовые строки и переменные строки

Вы должны указать, какое соединение использовать в вашей команде.

cmd = New SqlCommand("select username,password from login where 
username='" + TextBox1.Text + "'and password'" + TextBox2.Text + "' ", con)

Обратите внимание, что вы объединяете строку для построения SQL-запроса. Это ОЧЕНЬ ненадежно. Это приводит к инъекции SQL! Пожалуйста, как минимум двойные кавычки в строковой переменной и проверьте переменные int, которые являются переменными Но я настоятельно рекомендую вам использовать параметризованную переменную (см. Sp_executeSql).

cmd = New SqlCommand("select username,password from login where 
username='" + TextBox1.Text.replace("'", "''") + "'and password'" + TextBox2.Text.replace("'", "''") + "' ", con)
6
задан Lars Westergren 2 November 2008 в 09:22
поделиться

1 ответ

Я разделил бы его немного и продвинул бы анализ случая в |. Это - одно из преимуществ combinators и действительно LL (*) анализирующий в целом:

def factor: Parser[ExprTree] = ( wholeNumber ^^ { Number(_.toInt) }
                               | "(" ~> expr <~ ")" 
                               | ident ^^ { Variable(_) } )

Я приношу извинения, если Вы не знакомы с синтаксисом подчеркивания. В основном это просто означает, "заменяют энным параметром на значение функции включения". Таким образом { Variable(_) } эквивалентно { x => Variable(x) }.

Другой бит волшебства синтаксиса здесь ~> и <~ операторы вместо ~. Эти операторы означают, что парсинг того термина должен включать синтаксис обоих parens, но результат должен быть только определен результатом expr. Таким образом, "(" ~> expr <~ ")" соответствия точно то же самое как "(" ~ expr ~ ")", но это не требует, чтобы дополнительный анализ случая получил внутреннее значение результата от expr.

6
ответ дан 17 December 2019 в 02:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: