/ / Co znak zapytania reprezentuje w zapytaniach SQL? [duplicate] - sql, prepared-statement

Co oznacza znak zapytania w zapytaniach SQL? [duplicate] - sql, prepared-statement

Przechodząc przez niektóre książki SQL, stwierdziłem, że przykłady mają tendencję do używania znaków zapytania (?) w swoich zapytaniach. Co to reprezentuje?

Odpowiedzi:

68 za odpowiedź nr 1

To, co widzisz, to sparametryzowane zapytanie. Są często używane podczas wykonywania dynamicznego SQL z programu.

Na przykład zamiast pisać to (uwaga: pseudokod):

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

Piszesz to:

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

Ma to wiele zalet, co prawdopodobnie jest oczywiste. Jedna z najważniejszych: funkcje biblioteczne, które analizują twoje parametry, są sprytne i zapewniają, że łańcuchy znaków są poprawnie wymazywane. Na przykład, jeśli to napiszesz:

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

Co się stanie, gdy użytkownik wejdzie w to?

Robert"); DROP TABLE students; --

(Odpowiedź to tutaj)

Napisz to zamiast tego:

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

Wtedy biblioteka będzie zdezynfekować wejście, produkując to:

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

Nie wszystkie zastosowania DBMS ?. Używa MS SQL o nazwie parametry, które uważam za olbrzymi poprawa:

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

12 dla odpowiedzi nr 2

The ? jest nienazwanym parametrem, który może zostać wypełniony przez program uruchamiający zapytanie, aby tego uniknąć SQL injection.


5 dla odpowiedzi nr 3

The ? to pozwolić Sparametryzowane zapytanie. Ta sparametryzowana kwerenda pozwala na uwzględnienie wartości specyficznej dla typu przy wymianie pliku ? z ich odpowiednią wartością.

To wszystko.

Tutaj jest powód dlaczego lepiej jest używać Sparametryzowanego Zapytania, w zasadzie łatwiej jest go odczytywać i debugować.


2 dla odpowiedzi № 4

Jest to parametr, który możesz określić podczas wykonywania zapytania.


2 dla odpowiedzi № 5

Nie sądzę, że ma to jakiekolwiek znaczenie w SQL.Możesz być patrząc na Przygotowane oświadczenia w JDBC lub coś takiego.W tym przypadku, znaki zapytania są zastępcze dla parametrów do oświadczenia.


1 dla odpowiedzi № 6

Zwykle jest to parametr dostarczany przez klienta.