Подтвердить что ты не робот

Что представляет собой знак вопроса в SQL-запросах?

Просматривая некоторые SQL-книги, я обнаружил, что примеры, как правило, используют вопросительные знаки (?) в своих запросах. Что он представляет?

4b9b3361

Ответ 1

То, что вы видите, - это параметризованный запрос. Они часто используются при выполнении динамического SQL из программы.

Например, вместо написания этого (примечание: псевдокод):

ODBCCommand cmd = new ODBCCommand("SELECT thingA FROM tableA WHERE thingB = 7")
result = cmd.Execute()

Вы пишете это:

ODBCCommand cmd = new ODBCCommand("SELECT thingA FROM tableA WHERE thingB = ?")
cmd.Parameters.Add(7)
result = cmd.Execute()

Это имеет много преимуществ, что, вероятно, очевидно. Один из самых важных: функции библиотеки, которые анализируют ваши параметры, являются умными и гарантируют, что строки будут экранированы должным образом. Например, если вы пишете это:

string s = getStudentName()
cmd.CommandText = "SELECT * FROM students WHERE (name = '" + s + "')"
cmd.Execute()

Что происходит, когда пользователь вводит это?

Robert'); DROP TABLE students; --

(Ответ здесь)

Вместо этого напишите:

s = getStudentName()
cmd.CommandText = "SELECT * FROM students WHERE name = ?"
cmd.Parameters.Add(s)
cmd.Execute()

Затем библиотека будет дезинфицировать вход, создавая это:

"SELECT * FROM students where name = 'Robert''); DROP TABLE students; --'"

Не все СУБД используют ?. MS SQL использует именованные параметры, которые я считаю улучшением огромным:

cmd.Text = "SELECT thingA FROM tableA WHERE thingB = @varname"
cmd.Parameters.AddWithValue("@varname", 7)
result = cmd.Execute()

Ответ 2

? - это неназванный параметр, который может быть заполнен программой, выполняющей запрос, чтобы избежать SQL-инъекции.

Ответ 3

? должен разрешить Параметрированный запрос. Этот параметризованный запрос должен указывать значение типа при замене ? на их соответствующее значение.

Что все к нему.

Здесь a причина, почему лучше использовать Parameterized Query. В основном, это легче читать и отлаживать.

Ответ 4

Это параметр. Вы можете указать его при выполнении запроса.

Ответ 5

Я не думаю, что это имеет смысл в SQL. Возможно, вы смотрите на подготовленные заявления в JDBC или что-то в этом роде. В этом случае вопросительные знаки являются заполнителями параметров для оператора.

Ответ 6

Обычно он представляет собой параметр, который должен предоставлять клиент.