추신: KJ Daniel이 쓴 기사입니다. 어제 친구와 채팅을 하다가 ADO의 명령 쿼리에 대해 언급했습니다. 제가 기억력이 좋지 않아서 KJ Daniel이 쓴 기사를 발견한 것 같습니다. 꼭 읽어주세요. 일반적으로 ASP PHP 코드를 작성하는 친구들은 SQL을 직접 조작하는 경우가 많을 텐데요~
다음 코드를 보세요
<%
희미한 콘, rs
set conn=CreateObject(Adodb.Connection)
콘.오픈....
set rs=conn.execute(뉴스에서 * 선택);
...
트래버스 RS....
%>
구현 속도가 빠른 것은 확실하지만, 물론 구조적 논리에 1.5개의 문은 중요하지 않습니다! 문장이 너무 많으면 문제가 발생해요!
매개변수가 필터링되지 않았거나 SQL 삽입 등이 있었습니다. 자, 이제 디자인 모델을 변경해 보겠습니다!
3레이어 구조 + ORM 채택
ORM: 객체 관계 매핑
그렇다면 ORM 기술이란 무엇일까요? JAVA .NET 개발에 익숙한 친구들은 잘 알고 있을 겁니다..그것이 객체 관계형 매핑입니다.
테이블을 클래스 필드에 매핑하고, 속성에 매핑하고, 레코드를 객체에 매핑합니다. 현재 많은 JAVA ORM 지속성 계층 프레임워크가 있습니다.
예를 들어, ibatis EntityBean(EJB 중 하나)을 최대 절전 모드로 전환합니다.
ASP는 어떻습니까? 우리도 그것을 달성할 수 있습니다.
3계층 구조: WEB 프리젠테이션 계층, 중간 계층, 지속성 계층
다음은 간단한 뉴스 테이블입니다.
테이블 뉴스 생성(
이드 정수,
제목 varchar(200),
연락처 varchar(50000)
)
우리는 그것을 클래스로 매핑합니다.
<%
학급소식
개인ID,직위,연락처
하위 세트ID(SID)
id=Cint(시드)
서브 끝
함수 getID
getID=ID
기능 종료
하위 세트제목(제목)
title=mid(stitle,1,200)' 길이를 제한합니다.
서브 끝
....
수업 종료
%>
그런 다음 데이터베이스를 작동하는 방법에 대한 코드를 설계하고 이를 객체로 변환합니다.
<%
클래스 NewsDataAccessObject
희미한 연결,rs,cmd
'뉴스를 검색해 보세요.
함수 getNewsByID(id)
set conn=Application(connection)' 연결 풀에서 연결 가져오기
set cmd=GetCmd() ' GETCMD 함수 구현 return createobject(Adodb.Command)
selectString=ID = @id인 NEWS에서 *를 선택하세요.
cmd.ActiveConnection = 연결
cmd.CommandType = adCmdText ' Const adCmdText=1
cmd.CommandText = 선택문자열
'지금 @id에 매개변수를 추가하세요. 상수 adInteger = 3 adParamInput=1
cmd.Parameters.Append cmd.CreateParameter(@id, adInteger, adParamInput, , id)
'SQL 문을 실행하고 결과 집합을 반환합니다.
rs=cmd.execute()를 설정합니다.
다시 어두워지다
새로 설정=새로운 뉴스
만약 rs.eof라면
또 다른
anew.setID(rs(id)&)
anew.setTitle(rs(제목)&)
anew.setContect(rs(Contect)&)
종료하면
RS.닫기
rs=아무것도 설정하지 않음
cmd=아무것도 설정하지 않음
conn=아무것도 설정하지 않음
getNewsByID=새로 설정
기능 종료
'뉴스 기사를 삽입하세요
기능 addNews(새로)
희미한 연결, cmd
비어 있으면(새로) addNews=false
set conn=Application(connection)' 연결 풀에서 연결 가져오기
set cmd=GetCmd() ' GETCMD 함수 구현 return createobject(Adodb.Command)
insertString=NEWS(id,title,contect) 값에 삽입( @id , @title , @contect )
cmd.ActiveConnection = 연결
cmd.CommandType = adCmdText ' Const adCmdText=1
cmd.CommandText = insertString
'지금 @id @title @contect에 매개변수를 추가하세요. 상수 adInteger = 3 adParamInput=1 adVarWChar = 202
cmd.Parameters.Append cmd.CreateParameter(@id, adInteger, adParamInput, , anew.getID() )
cmd.Parameters.Append cmd.CreateParameter(@title,adVarWChar, adParamInput, 200, anew.getTitle() )
cmd.Parameters.Append cmd.CreateParameter(@contect,adVarWChar, adParamInput, 50000, anew.getConect() )
'SQL문 실행
cmd.실행()
cmd=아무것도 설정하지 않음
conn=아무것도 설정하지 않음
추가뉴스=true
기능 종료
함수 findByTitle(제목)
....
기능 종료
함수 getPageNews(페이지,크기)
....
기능 종료
수업 종료
%>
위의 방법은 데이터베이스를 운영한 후 그 결과를 객체에 캡슐화하거나 객체를 데이터베이스에 쓰는 것입니다.
이 구현 속도는 약간 느려지지만 전체적인 논리 구조는 매우 명확하며 변수가 필터링되었는지 다중 필터링되었는지 신경 쓸 필요가 없습니다.
웹 페이지 계층의 디자이너는 인터페이스에 더 중점을 둡니다.
아래에 제출할 뉴스 코드를 추가하세요.
<%
희미한 ID,제목,연락처,새로,다오
id=요청(ID)
title=요청.양식(제목)
contact=Request.Form(연락처)
새로 설정=새 뉴스
anew.setID(id)
anew.setTitle(제목)
anew.setContect(연결)
dao=new NewsDataAccessObject 설정
dao.addNews(anew)이면
'응답.쓰기
에코 성공
또 다른
에코 오류
종료하면
%>
뉴스를 확인하고 표시해 보세요.
<%
딤이드다오새로
id=요청(ID)
dao=new NewsDataAccessObject 설정
새로 설정=dao.getNewsByID(id)
anew.getID()<>이면
%>
제목:<%=anew.getTitle()%>
내용:<%=anew.getContect()%>
.....
위 코드에 오류나 누락이 있으면 조언 부탁드립니다~~
이 디자인 방법을 사용하면 XXXBLOG XXXBBS XXX와 같은 기사 시스템을 사용할 필요가 없습니다.
바꾸기(SQL,','')를 잊어버리고 주입이 발생했습니다!
페이지의 청결성 측면에서 SQL 문은 없을 것입니다. 연결과 같은 아티스트는 자신의 작업을 담당하고 해당 위치에 개체의 속성을 배치합니다.
그리고 몇몇 친구들은 사용자 인증에 대해 생각할 수도 있습니다! 사용자 테이블의 사용자 개체를 세션에 넣는 것이 더 쉬울 것입니다.
<%
isempty(session(user)) 또는 session(user)=이면
'도약
또 다른
auser=세션(사용자) 설정
에코 환영: & auser.getName()
%>