Api de Base de datos en OpenACS 5.1 Variables ligadas.....
(Segunda Parte)
Las variables ligadas tienen como finalidad "pasar" datos que normalmente solicita el usuario a las sentencias SQL que utilizamos para obtener información de la Base de datos.
Un ejemplo tipico de su uso es presentar un formulario en pantalla para pedir los datos de nombre y apellidos para crear un nuevo amigo, estos valores los almacenamos en variables y llamamos a una funcion para insertar amigos a la cual le pasamos ambas variables.
Esta función sería de la forma:
db_dml insertar_amigo "insert into amigos(nombre,apellidos) values (:form_nombre,:form_apellidos)"
Como vemos las variables ligadas en el codigo SQL se anteponen con el caracter de dos puntos ":".
Ahora veamos otra consideración, ¿podriamos sustituir este mismo codigo sin utilizar variables ligadas?.
Podiamos pensar en hacerlo de la siguiente manera:
db_dml insertar_amigo "insert into amigos(nombre,apellidos) values ($form_nombre,$form_apellidos)"
con lo cual llamariamos a las variables TCL directamente, entonces ¿para que son necesarias las variables ligadas?.
La respuesta es simple, una variable ligada nunca es interpretada, es decir su valor SIEMPRE será un literal con lo cual no tendremos el problema por ejemplo de que alguien introduzca codigo en una variable y este codigo llegue a ejecutarse.
Un ejemplo de esto ultimo:
Imaginemos que dentro de nuestra tabla de amigos alguien introduce una entrada con la siguiente información para crear un nuevo amigo:
nombre = "miguel or pepe"
imaginemos ahora que queremos borrar esta entrada y que nuestra funcion de borrado no utiliza variables ligadas, la funcion sería :
db_dml borrar_amigo "delete from amigos where nombre=$form_nombre"
el resultado seria que borrariamos de la base de Datos los valosres correspondientes a "miguel" y "pepe" comportamiento que no deseamos pues solo queremos borrar 1 valor.
Esto se soluciona utilizando variables ligadas que NUNCA serán interpretadas, nuestra función sería de la siguiente manera:
db_dml borrar_amigo "delete from amigos where nombre=:form_nombre"
de esta manera solo borrariamos aquella entrada con el valor "miguel or pepe" en el campo nombre.
Por este motivo es recomendable utilizar este tipo de variables.
lunes, julio 04, 2005
Suscribirse a:
Enviar comentarios (Atom)
No hay comentarios:
Publicar un comentario