Łukasz Lica

Łukasz Lica Informatyk /
programista

Temat: Apostrof w zapytaniu SQL

Witam

Zetknalem sie z problemem apostrofu w zapytaniu SQL, problem polega na tym iz do zapytania jest przekazywana zmienna typu string ktora zawiera w sobie nazwe firmy z apostrofem.Problem polega na tym ze SQL interpretuje wszystko po tym znaku jak nowe zapytanie.Czy mozna jakos oznaczyc string , tak aby byl interpretowany przez SQL jako string łącznie z aposrofem??.

Dodam tylko ze korzystam z AmBasica, byc moze sa tam jakies rozwiazania juz gotowe.

Pozdrawiam.
Tomasz M.

Tomasz M. never go full
retard!

Temat: Apostrof w zapytaniu SQL


Like Predicate Escape Characters

In a LIKE predicate, the percent sign (%) matches zero or more of any character and the underscore (_) matches any one character. To match an actual percent sign or underscore in a LIKE predicate, an escape character must precede the % or _. The escape sequence that defines the LIKE predicate escape character is:

{escape 'escape-character'}

where escape-character is any character supported by the data source.

Example:

SELECT Name FROM Customers
WHERE Name LIKE '\%AAA%' {escape '\'}

Returns all the customers for which the name starts with "%AAA".


Ja bym to rozwiązał funkcja zamianiającą 'wrażliwe' znaki na znak z sekwencją \

Generalnie Firma A'B -> Firma A\'B w AmBasicu, spotkałem się z tym problemem ;)
Łukasz Lica

Łukasz Lica Informatyk /
programista

Temat: Apostrof w zapytaniu SQL

Niestety mimo modyfikowania nazwy firmy , blad SQL'a madal sie pojawia...

ponizej procedura ktora zamieniam ww nazwe.

string sub ConvApSql(string kodkh)
string chr
int strdl

strdl = len(kodkh) + 1
for i = 1 to i >= strdl if mid(kodkh, i, 1) == "'" then
chr = ""
for j = 1 to j >= i
chr = chr + mid(kodkh, j, 1)
next j chr = chr + "\\"
for k = j to k >= strdl
chr = chr + mid(kodkh, k, 1) next k

ConvApSql = chr

endif
next i

endsubŁukasz Lica edytował(a) ten post dnia 23.02.09 o godzinie 09:49
Łukasz Lica

Łukasz Lica Informatyk /
programista

Temat: Apostrof w zapytaniu SQL

Generalnie w MySQL'u konstrukcja A\'B dziala prawidlowo, natomiast z poziomu AmBasic'a i z wykorzystaniem MSSQL'a niestety juz nie.Nadal zwraca ten sam blad, tak jak by znak "\" byl ignorowany.
Tomasz M.

Tomasz M. never go full
retard!

Temat: Apostrof w zapytaniu SQL

Przepraszam, mój błąd. Escape character dla apostrofu to, o dziwo!, drugi apostrof. Dopiero teraz spojrzałem w kod - ile implementacji, tyle pomysłów.

Prawidłowa funkcja powinna wyglądać tak...

string sub ConvApSqlUltimate(string s)
int i
string tmp
for i = 1 to i > len(s)
if mid(s,i,1) == "'" then
tmp += "''"
else
tmp += mid(s,i,1)
endif
next i
ConvApSqlUltimate = tmp
endsub

string doBazy = ConvApSqlUltimate("A'B''D'FF'")
string sqlQuery = (using "SELECT * FROM kh WHERE kod = '%s'", doBazy)

dispatch conn = GetADOConnection()
dispatch rs = "ADODB.Recordset"
rs.Open(sqlQuery, conn)
rs.Close()
Łukasz Lica

Łukasz Lica Informatyk /
programista

Temat: Apostrof w zapytaniu SQL

Bardzo dziekuje za pomoc, staralem sie wygooglowac cokolwiek na temat apostrofów w MSSQL'u, ale jedyny temat ktory sie przewija to SQL injection ;).

Na przyszlosc nalezy pamietac ze dla MySQL to "\", a dla MSSQL to "'"

Dziekuje i pozdrawiam.



Wyślij zaproszenie do