PD: El artículo escrito por KJ Daniel. Ayer, cuando estaba charlando con un amigo, mencioné la consulta de comando de ADO. De hecho, me olvidé de esto. Parece que mi memoria es realmente mala. Por favor léelo. Generalmente, los amigos que escriben código PHP ASP probablemente usan la operación directa de SQL ~
Mira el siguiente código
<%
conexiones tenues
establecer conexión=CrearObjeto(Adodb.Connection)
conexión.abierta....
set rs=conn.execute(seleccione * de noticias);
...
Atravesar rs....
%>
Es cierto que la velocidad de implementación es rápida, pero, por supuesto, ¡una declaración y media en la lógica estructural no importa! ¡Los problemas surgen cuando hay demasiadas declaraciones!
Los parámetros no están filtrados, hay inyección SQL, etc. ¡Bien, ahora cambiemos el modelo de diseño!
Adoptar estructura de 3 capas + ORM
ORM: MAPEO DE RELACIONES DE OBJETOS
Entonces, ¿qué es la tecnología ORM? Los amigos que estén familiarizados con el desarrollo de JAVA .NET deben saberlo muy bien... eso es mapeo relacional de objetos.
Asigne tablas a campos de clase, asigne propiedades y asigne registros a objetos... Ahora existen muchos marcos de capa de persistencia JAVA ORM
Por ejemplo, hibernar ibatis EntityBean (uno de EJB)
¿Qué pasa con ASP? También podemos lograrlo. Espere la presentación.
Estructura de 3 capas: capa de presentación WEB, capa intermedia, capa de persistencia
Aquí hay una tabla de noticias simple.
crear noticias de mesa (
identificación interna,
título varchar(200),
contactovarchar(50000)
)
Lo mapeamos como una clase.
<%
Noticias de clase
identificación privada, título, contacto
SubconjuntoID(sid)
id=Cint(sid)
Subtítulo final
Función obtener ID
obtenerID=identificación
Función final
SubconjuntoTítulo(título)
title=mid(stitle,1,200)'limita la longitud
Subtítulo final
....
Fin de clase
%>
Luego diseñamos el código sobre cómo operar la base de datos y convertirla en objetos.
<%
Noticias de claseObjeto de acceso a datos
conexión tenue, rs, cmd
'Consultar una noticia
Función getNewsByID(id)
set conn=Aplicación(conexión)' Obtener una conexión en el grupo de conexiones
set cmd=GetCmd() ' La implementación de la función GETCMD devuelve createobject(Adodb.Command)
selectString=seleccione * de NOTICIAS donde id = @id
cmd.ActiveConnection = conexión
cmd.CommandType = adCmdText ' Const adCmdText=1
cmd.CommandText = seleccionarcadena
'Agregue parámetros al @id ahora mismo, constante adInteger = 3 adParamInput=1
cmd.Parameters.Append cmd.CreateParameter(@id, adInteger, adParamInput,, id)
'Ejecuta la sentencia SQL y devuelve el conjunto de resultados
establecer rs=cmd.execute()
oscuro de nuevo
establecer de nuevo = nueva noticia
si rs.eof entonces
demás
nuevo.setID(rs(id)&)
nuevo.setTitle(rs(título)&)
nuevo.setContect(rs(Contect)&)
terminar si
rs.cerrar
establecer rs = nada
establecer cmd = nada
establecer conexión = nada
establecer getNewsByID = nuevo
Función final
'Insertar un articulo de noticias
Función agregarNoticias (nuevamente)
conexión tenue, cmd
si está vacío (nuevamente) entonces addNews=false
set conn=Aplicación(conexión)' Obtener una conexión en el grupo de conexiones
set cmd=GetCmd() ' La implementación de la función GETCMD devuelve createobject(Adodb.Command)
insertString=insertar en los valores de NOTICIAS(id,título,contect)( @id , @title , @contect )
cmd.ActiveConnection = conexión
cmd.CommandType = adCmdText ' Const adCmdText=1
cmd.CommandText = insertar cadena
'Agregue parámetros al @id @title @contect ahora mismo, 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())
'Ejecutar sentencia SQL
cmd.ejecutar()
establecer cmd = nada
establecer conexión = nada
agregarNoticias=verdadero
Función final
Función findByTitle(título)
....
Función final
Función getPageNews(página,tamaño)
....
Función final
Fin de clase
%>
Lo anterior es operar la base de datos y luego encapsular los resultados en el objeto o escribir el objeto en la base de datos.
Aunque la velocidad de esta implementación será un poco más lenta, la estructura lógica general es muy obvia y no hay necesidad de preocuparse si las variables se han filtrado o multifiltrado.
Los diseñadores de la capa de la página web se centran más en la interfaz.
Agregue el código de noticias para enviar a continuación
<%
ID tenue, título, contacto, nuevo, dao
id=Solicitud(id)
título=Solicitud.Formulario(título)
contacto=Solicitud.Formulario(contacto)
establecer de nuevo = nueva NOTICIA
nuevo.setID(id)
nuevo.setTitle(título)
anew.setContect(conectar)
set dao=nuevo objeto de acceso a datos de noticias
si dao.addNews (nuevamente) entonces
'respuesta.escribir
eco del éxito
demás
error de eco
terminar si
%>
Consulta las novedades y muéstralas.
<%
identificación tenue, dao, de nuevo
identificación = Solicitud (identificación)
set dao=nuevo objeto de acceso a datos de noticias
establecer de nuevo = dao.getNewsByID (id)
si anew.getID()<> entonces
%>
Título:<%=anew.getTitle()%>
Contenido:<%=anew.getContect()%>
.....
Si hay algún error u omisión en el fragmento de código anterior, gracias por su consejo ~~~
Con este método de diseño, no es necesario utilizar un sistema de artículos como XXXBLOG XXXBBS XXX.
¡Olvidé Reemplazar (SQL,','') y se produjo la inyección!
En términos de limpieza de la página, no habrá declaraciones SQL. Los artistas como la conexión son responsables de su propio trabajo y luego colocan las propiedades del objeto en la posición correspondiente.
¡Y algunos amigos pueden pensar en la autenticación de usuarios! Sería más fácil simplemente colocar el objeto de usuario de la tabla de usuarios en la sesión.
<%
si está vacío (sesión (usuario)) o sesión (usuario) = entonces
'Saltar
demás
establecer un usuario = sesión (usuario)
eco bienvenido: & auser.getName()
%>