PS: Als ich gestern mit einem Freund chattete, habe ich die Befehlsabfrage von KJ Daniel tatsächlich vergessen. Bitte lesen Sie es. Im Allgemeinen verwenden Freunde, die ASP-PHP-Code schreiben, wahrscheinlich die direkte Operation von SQL~
Schauen Sie sich den folgenden Code an
<%
dim conn,rs
set conn=CreateObject(Adodb.Connection)
Verbindung offen....
set rs=conn.execute(select * from news);
...
Querung rs....
%>
Es ist sicher, dass die Implementierungsgeschwindigkeit hoch ist, aber eineinhalb Anweisungen in der Strukturlogik spielen natürlich keine Rolle! Bei zu vielen Aussagen entstehen Probleme!
Die Parameter werden nicht gefiltert, es gibt eine SQL-Injection usw. OK, jetzt ändern wir das Designmodell!
Nehmen Sie eine 3-Schicht-Struktur + ORM an
ORM: OBJEKTBEZIEHUNGSMapping
Was ist also ORM-Technologie? Freunde, die mit der JAVA .NET-Entwicklung vertraut sind, müssen es sehr gut wissen ... das ist objektrelationale Zuordnung
Ordnen Sie Tabellen Klassenfeldern zu, ordnen Sie sie Eigenschaften zu und ordnen Sie Datensätze Objekten zu ... Mittlerweile gibt es viele JAVA-ORM-Persistenzschicht-Frameworks
Beispiel: Ruhezustand von ibatis EntityBean (eines von EJB)
Was ist mit ASP? Wir können es auch erreichen. Warten Sie auf die Einführung
3-Schichten-Struktur: WEB-Präsentationsschicht, Mittelschicht, Persistenzschicht
Hier ist eine einfache Nachrichtentabelle
Tabellennachrichten erstellen(
id int,
Titel varchar(200),
Kontakt varchar(50000)
)
Wir bilden es als Klasse ab
<%
Klassennachrichten
Private ID, Titel, Kontakt
SubsetID(sid)
id=Cint(sid)
Sub beenden
Funktion getID
getID=id
Funktion beenden
UntersatzTitel(Titel)
title=mid(stitle,1,200)'begrenzt die Länge
Sub beenden
....
Unterricht beenden
%>
Anschließend entwerfen wir den Code für den Betrieb der Datenbank und konvertieren ihn in Objekte.
<%
Klasse NewsDataAccessObject
dimmen Sie conn,rs,cmd
„Fragen Sie eine Neuigkeit ab.“
Funktion getNewsByID(id)
set conn=Application(connection)' Ruft eine Verbindung im Verbindungspool ab
set cmd=GetCmd() ' GETCMD-Funktionsimplementierung return createobject(Adodb.Command)
selectString=select * from NEWS where id = @id
cmd.ActiveConnection = Verbindung
cmd.CommandType = adCmdText ' Const adCmdText=1
cmd.CommandText = selectString
'Fügen Sie gerade Parameter zur @id hinzu, Konstante adInteger = 3 adParamInput=1
cmd.Parameters.Append cmd.CreateParameter(@id, adInteger, adParamInput, , id)
'Führen Sie die SQL-Anweisung aus und geben Sie die Ergebnismenge zurück
setze rs=cmd.execute()
erneut verdunkeln
set anew=new News
wenn rs.eof dann
anders
anew.setID(rs(id)&)
anew.setTitle(rs(title)&)
anew.setContect(rs(Contect)&)
Ende wenn
rs.close
setze rs=nichts
setze cmd=nichts
setze conn=nichts
setze getNewsByID=anew
Funktion beenden
„Fügen Sie einen Nachrichtenartikel ein
Funktion addNews(anew)
dim conn,cmd
wenn isempty(anew), dann addNews=false
set conn=Application(connection)' Ruft eine Verbindung im Verbindungspool ab
set cmd=GetCmd() ' GETCMD-Funktionsimplementierung return createobject(Adodb.Command)
insertString=in NEWS(id,title,contect)-Werte einfügen( @id , @title , @contect )
cmd.ActiveConnection = Verbindung
cmd.CommandType = adCmdText ' Const adCmdText=1
cmd.CommandText = insertString
'Fügen Sie gerade Parameter zur @id @title @contect hinzu, Konstante 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-Anweisung ausführen
cmd.execute()
setze cmd=nichts
setze conn=nichts
addNews=true
Funktion beenden
Funktion findByTitle(stitle)
....
Funktion beenden
Funktion getPageNews(page,size)
....
Funktion beenden
Unterricht beenden
%>
Das Obige besteht darin, die Datenbank zu betreiben und dann die Ergebnisse in das Objekt zu kapseln oder das Objekt in die Datenbank zu schreiben.
Obwohl die Geschwindigkeit dieser Implementierung etwas langsamer sein wird, ist die gesamte logische Struktur sehr offensichtlich und es besteht kein Grund zur Sorge, ob die Variablen gefiltert oder mehrfach gefiltert wurden.
Designer auf der Webseitenebene konzentrieren sich mehr auf die Benutzeroberfläche.
Fügen Sie den Nachrichtencode hinzu, um ihn unten einzureichen
<%
dim id,title,contect,anew,dao
id=Anfrage(id)
title=Request.Form(title)
contact=Request.Form(contect)
set anew=neue NEWS
anew.setID(id)
anew.setTitle(title)
anew.setContect(contect)
set dao=new NewsDataAccessObject
wenn dao.addNews(anew) dann
'response.write
Echo-Erfolg
anders
Echofehler
Ende wenn
%>
Schauen Sie sich die Nachrichten an und zeigen Sie sie an
<%
dim id,dao,neu
id=Anfrage(id)
set dao=new NewsDataAccessObject
set anew=dao.getNewsByID(id)
if anew.getID()<> then
%>
Titel:<%=anew.getTitle()%>
Inhalt:<%=anew.getContect()%>
.....
Sollten im obigen Codeausschnitt Fehler oder Auslassungen vorhanden sein, vielen Dank für Ihren Rat~~~
Mit dieser Designmethode ist es nicht erforderlich, ein Artikelsystem wie XXXBLOG XXXBBS XXX zu verwenden
Ersetzen(SQL,','') vergessen und Injektion aufgetreten!
Im Hinblick auf die Sauberkeit der Seite wird es keine SQL-Anweisungen wie die Verbindung geben, die für ihre eigene Arbeit verantwortlich sind und dann die Eigenschaften des Objekts an der entsprechenden Stelle platzieren.
Und einige Freunde denken vielleicht über die Benutzerauthentifizierung nach! Es wäre einfacher, einfach das Benutzerobjekt der Benutzertabelle in die Sitzung einzufügen.
<%
if isempty(session(user)) oder session(user)= then
'Springen
anders
set auser=session(user)
echo willkommen: & auser.getName()
%>