개요
쿼리문 작성 어떻게 하나요?
그냥 막코딩 하면 되지요~~
가독성 따윈 필요 없으니
", name=" + name + ", nick=" +
이런 식으로 해도 되지요.
열맞추고 줄맞추고 해서 가독성 높일 수도 있습니다.
저도 전에 그렇게 했었어요.
하지만 잠깐 시간을 내어 아래 함수 사용법을 익히면,
가독성이 높은 쿼리문을 작성 할 수 있습니다.
가독성이 높아지면 실수할 확률이 적어지고, 디버깅 횟수가 줄게 되어
결과적으로 빠른 코딩이 가능해 집니다.
가장 중요한 함수는 가독성을 위한 stringFormat()과 보안을 위한 toDbString() 입니다.
함수들
<%
'닷넷의 String.Format을 흉내낸 함수 입니다.
Function stringFormat(sVal, aArgs)
Dim i
For i=0 To UBound(aArgs)
sVal = Replace(sVal,"{" & CStr(i) & "}",aArgs(i))
Next
StringFormat = sVal
End Function
'아래와 같이 결과를 변수에 무조건 대입해야 합니다. 아니면 문법 오류가 발생 합니다.
'Dim result
'result = stringFormat("this {0} a tes{1} string containing {2} values", _
' Array("is", "t", "some"))
'PHP의 eregi_replace 를 흉내낸 함수 입니다.
Function eregi_replace(pattern, replace, text)
Dim eregObj
Set eregObj = New RegExp
eregObj.Pattern = pattern '패턴 설정
eregObj.IgnoreCase = True '대소문자 구분 여부
eregObj.Global = True '전체 문서에서 검색
eregi_replace = eregObj.Replace(text, replace): 'Replace String
End Function
'문자열을 쿼테이션으로 감싸주는 것을 기본으로 하여,
'사용자가 입력한 ' 에 대한 지원과
'SQL 인젝션 방지 그리고 자바스크립트 삽입 방지를 지원합니다.
Function toDbString(str)
str = Replace(str, "'", "''")
str = "'" + str + "'"
str = eregi_replace("<script", "< script", str)
str = eregi_replace("</script", "< /script", str)
toDbString = str
End Function
%>
사용법
<%
query = stringFormat("update bbsCon set title={0}, content={1}, ip={2} where id={3}", _
Array(toDbString(title), _
toDbString(content), _
toDbString(Request.ServerVariables("REMOTE_ADDR")), _
id _
) _
)
query = stringFormat("insert into bbsCon (title, content, nick, ip) values ({0}, {1}, {2}, {3})", _
Array(toDbString(title), _
toDbString(content), _
toDbString(Session("nick")), _
toDbString(Request.ServerVariables("REMOTE_ADDR")) _
) _
)
query = stringFormat("delete from bbsCon where id={0}", _
Array(id))
query = stringFormat("select id, dtReg, title, nick, readCnt, ip from bbsCon order by id desc", _
Array())
query = stringFormat("select * from bbsCon where id={0}", _
Array(id))
%>
'ASP > ASP My Library' 카테고리의 다른 글
ASP HTML Tag 값과 DB 값을 호환 시키기 위한 짝 함수 - checkbox (0) | 2013.10.04 |
---|