PS : L'article écrit par KJ Daniel hier, alors que je discutais avec un ami, j'ai mentionné la requête de commande d'ADO. J'ai en fait oublié cette chose. Il semble que j'ai trouvé l'article de KJ Daniel. Veuillez le lire. Généralement, les amis qui écrivent du code ASP PHP utilisent probablement le fonctionnement direct de SQL~
Regardez le code suivant
<%
dim conn,rs
set conn=CreateObject(Adodb.Connection)
conn.ouvert....
set rs=conn.execute(select * from news);
...
Traversée rs....
%>
Il est certain que la vitesse de mise en œuvre est rapide, mais bien sûr, une déclaration et demie dans la logique structurelle n'a pas d'importance ! Des problèmes surviennent lorsqu’il y a trop de déclarations !
Les paramètres ne sont pas filtrés, il y a de l’injection SQL, etc. OK, changeons maintenant de modèle de conception !
Adopter une structure à 3 couches + ORM
ORM : MAPPAGE DES RELATIONS OBJET
Alors, qu’est-ce que la technologie ORM ? Les amis qui connaissent le développement JAVA .NET doivent très bien savoir... c'est le mappage objet-relationnel
Mapper les tables aux champs de classe, les mapper aux propriétés et mapper les enregistrements aux objets... Il existe désormais de nombreux frameworks de couches de persistance JAVA ORM
Par exemple, hiberner ibatis EntityBean (l'un des EJB)
Et l'ASP ? Nous pouvons également y parvenir. Attendez l’introduction.
Structure à 3 couches : couche de présentation WEB, couche intermédiaire, couche de persistance
Voici un tableau de nouvelles simple
créer des nouvelles de table (
identifiant int,
titre varchar(200),
contacter varchar(50000)
)
Nous le cartographions en tant que classe
<%
Nouvelles de la classe
identifiant privé, titre, contact
Sous-ensembleID(sid)
identifiant=Cint(sid)
Fin du sous-marin
Fonction getID
getID = identifiant
Fonction de fin
Sous-ensembleTitre(stitre)
title=mid(stitle,1,200)'limite la longueur
Fin du sous-marin
....
Fin du cours
%>
Ensuite, nous concevons le code sur la façon de faire fonctionner la base de données et de la convertir en objets.
<%
Classe NewsDataAccessObject
dim conn, rs, cmd
'Interroger une nouvelle
Fonction getNewsByID(id)
set conn=Application(connection)' Obtenez une connexion dans le pool de connexions
set cmd=GetCmd() ' Implémentation de la fonction GETCMD return createobject (Adodb.Command)
selectString=select * from NEWS où id = @id
cmd.ActiveConnection = connexion
cmd.CommandType = adCmdText ' Const adCmdText=1
cmd.CommandText = selectString
'Ajoutez des paramètres au @id tout à l'heure, constante adInteger = 3 adParamInput=1
cmd.Parameters.Append cmd.CreateParameter (@id, adInteger, adParamInput, , id)
'Exécutez l'instruction SQL et renvoyez le jeu de résultats
définir rs=cmd.execute()
s'assombrit à nouveau
redéfinir=nouvelles
si rs.eof alors
autre
à nouveau.setID(rs(id)&)
anew.setTitle(rs(titre)&)
anew.setContect(rs(Contect)&)
finir si
rs.fermer
définir rs = rien
définir cmd = rien
définir conn = rien
définir getNewsByID = à nouveau
Fonction de fin
'Insérer un article d'actualité
Fonction addNews (à nouveau)
faible connexion, cmd
si je suis vide (à nouveau) alors addNews = false
set conn=Application(connection)' Obtenez une connexion dans le pool de connexions
set cmd=GetCmd() ' Implémentation de la fonction GETCMD return createobject (Adodb.Command)
insertString=insérer dans les valeurs NEWS(id,title,contect) ( @id , @title , @contect )
cmd.ActiveConnection = connexion
cmd.CommandType = adCmdText ' Const adCmdText=1
cmd.CommandText = insertString
'Ajoutez des paramètres au @id @title @contect tout à l'heure, constante 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() )
'Exécuter l'instruction SQL
cmd.execute()
définir cmd = rien
définir conn = rien
addNews=true
Fonction de fin
Fonction findByTitle(stitre)
....
Fonction de fin
Fonction getPageNews(page,taille)
....
Fonction de fin
Fin du cours
%>
Ce qui précède consiste à exploiter la base de données, puis à encapsuler les résultats dans l'objet ou à écrire l'objet dans la base de données.
Bien que la vitesse de cette implémentation soit légèrement plus lente, la structure logique globale est très évidente et il n'est pas nécessaire de se soucier de savoir si les variables ont été filtrées ou multi-filtrées.
Les concepteurs de la couche page Web se concentrent davantage sur l’interface.
Ajoutez un code d'actualité à soumettre ci-dessous
<%
dim id, titre, contact, à nouveau, dao
identifiant = Demande (identifiant)
titre=Requête.Form(titre)
contact=Request.Form(contact)
redéfinir = nouvelles NOUVELLES
à nouveau.setID(id)
anew.setTitle(titre)
anew.setContect(contect)
définir dao = nouveau NewsDataAccessObject
si dao.addNews (à nouveau) alors
'réponse.écrire
écho du succès
autre
erreur d'écho
finir si
%>
Consultez l'actualité et affichez-la
<%
dim id, dao, à nouveau
identifiant = Demande (identifiant)
définir dao = nouveau NewsDataAccessObject
set anew=dao.getNewsByID(id)
si anew.getID()<> alors
%>
Titre :<%=anew.getTitle()%>
Contenu :<%=anew.getContect()%>
.....
S'il y a des erreurs ou des omissions dans l'extrait de code ci-dessus, merci pour vos conseils~~~
En utilisant cette méthode de conception, il n'est pas nécessaire d'utiliser un système d'articles comme XXXBLOG XXXBBS XXX
J'ai oublié le remplacement (SQL,','') et une injection s'est produite !
En termes de propreté de la page, il n'y aura pas de déclarations SQL. Les artistes tels que la connexion sont responsables de leur propre travail et mettent ensuite les propriétés de l'objet à la position correspondante.
Et certains amis penseront peut-être à l’authentification des utilisateurs ! Il serait plus facile de simplement placer l'objet utilisateur de la table utilisateur dans la session.
<%
si isempty(session(user)) ou session(user)= alors
'Saut
autre
définir l'utilisateur = session (utilisateur)
echo bienvenue : & auser.getName()
%>