Параметризованные столбцы SQL?

Да, вы правы, это O (n), где n - длина списка. Дополнительную информацию смотрите здесь: https://www.ics.uci.edu/~pattis/ICS-33/lectures/complexitypython.txt

8
задан Jon Seigel 4 March 2010 в 18:57
поделиться

6 ответов

Вместо того, чтобы передать имена столбцов, просто передайте идентификатор, который Вы кодируете, переведет в имя столбца с помощью hardcoded таблицы. Это означает, что Вы не должны волноваться о злонамеренных передаваемых данных, так как все данные или переводятся по закону или, как известно, недопустимы. Код Psudoish:

@columns = qw/Name Address Telephone/;
if ($columns[$param]) {
  $query = "select * from contacts where $columns[$param] = ?";
} else {
  die "Invalid column!";
}

run_sql($query, $search);
6
ответ дан 5 December 2019 в 22:21
поделиться

Прием должен быть уверен в Вашем выходе и проверке стандартных программ. Я использую свою собственную функцию Escape SQL, которая перегружается для литералов различных типов. Нигде не сделайте я вставляю выражения (в противоположность заключенным в кавычки литеральным значениям) непосредственно от ввода данных пользователем.

Однако, это может быть сделано, я рекомендую, чтобы отдельное — и строгий — функционировало для проверки имени столбца. Позвольте этому принимать только единственный идентификатор, что-то как

/^\w[\w\d_]*$/

Необходимо будет полагаться на предположения, которые можно сделать о собственных именах столбцов.

0
ответ дан 5 December 2019 в 22:21
поделиться

Сделайте столбец на основе результатов другого запроса к таблице, которая перечисляет возможные значения схемы. В том втором запросе Вы можете hardcode выбор к имени столбца, которое используется для определения схемы. если никакие строки не возвращаются затем, вводимый столбец недопустим.

0
ответ дан 5 December 2019 в 22:21
поделиться

Я использую ADO.NET и использование Команд SQL и SQLParameters к тем командам, которые заботятся о проблеме Escape. Таким образом, если Вы находитесь в среде инструмента Microsoft также, я могу сказать, что использую это очень sucesfully, чтобы создать динамический SQL и все же защитить мои параметры

всего наилучшего

0
ответ дан 5 December 2019 в 22:21
поделиться

Имена столбцов в некоторых базах данных могут содержать пробелы, которые означают, что необходимо было бы заключить имя столбца в кавычки, но если база данных не содержит таких столбцов, просто выполните имя столбца через регулярное выражение или своего рода проверку прежде, чем соединить в SQL:

if ( $column !~ /^\w+$/ ) {
  die "Bad column name [$column]";
}
0
ответ дан 5 December 2019 в 22:21
поделиться

В стандартном SQL Вы включаете выделенные идентификаторы в двойные кавычки. Это означает что:

SELECT * FROM "SomeTable" WHERE "SomeColumn" = ?

выберет из таблицы под названием SomeTable с показанной капитализацией (не преобразованная из случая версия имени) и применит условие к столбцу под названием SomeColumn с показанной капитализацией.

Из себя это не очень полезно, но... если можно применить Escape () техника с двойными кавычками к именам, введенным с помощью веб-формы, затем можно создать запрос обоснованно уверенно.

Конечно, Вы сказали, что хотели избегать использования Escape - и действительно Вы не должны использовать его на параметрах, где Вы обеспечиваете? заполнители. Но где Вы помещаете обеспеченные пользователями данные в запрос, необходимо защитить себя от злонамеренных людей.

Другой DBMS имеет различные способы обеспечить выделенные идентификаторы. SQL Server MS, например, кажется, использует квадратные скобки [SomeTable] вместо двойных кавычек.

0
ответ дан 5 December 2019 в 22:21
поделиться
Другие вопросы по тегам:

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