SIMPLE使用asp和表单设置SQL变量

时间:2013-12-13 16:15:20

标签: sql-server forms asp-classic

我的问题是:我希望使用变量将值插入到我的SQL数据库中。这些变量是通过asp及其相关的html表单定义的。

我是初学者,这是我到目前为止的代码。

我的表:

<html>
<body>
<form action="trial3.asp" method="post">
Your first name: <input type="text" name="fname" size="20" /><br>
Your last name: <input type="text" name="lname" size="20" /><br>
Your email: <input type="text" name="email" size="20" /><br>
<input type="submit" value="Submit" />
</form>
</body>
</html>

我的trial3.asp:

<%
'creating the inputs for the table, first name, last name, email
dim fname, lname, email
fname=Request.form("fname")
lname=Request.form("lname")
email=Request.form("email")
%>

asp中的MySQL代码:

SQL="DECLARE @fname AS varchar(50), @lname VARCHAR(50), @email VARCHAR(100)"
SQL=SQL & "SET @fname='"+fname+"'"
SQL=SQL & "SET @lname='"+lname+"'"
SQL=SQL & "SET @email='"+email+"''"
SQL=SQL & "INSERT INTO Students (First_Name, Last_Name, Email) values (@fname, @lname, @email)"

感谢您的帮助!

4 个答案:

答案 0 :(得分:0)

他试图将变量插入到SQL字符串中,以避免通过直接访问进行SQL注入(例如,insert语句不直接保存表单的输入,而是通过@fname,@ lname)

我没有看到问题,但我确实发现每个SQL命令之间缺少间距,因此当您调用“&amp;”时,它们最终会像这样:

DECLARE @fname AS varchar(50),@ list VARCHAR(50),@ email VARCHAR(100)SET @ fname ='test'SET @ lname ='ddddd'SET @ email ='Bob'

答案 1 :(得分:-1)

您使用的是什么数据库 - SQL Server,MySQL,Access还是其他什么?您的查询看起来好像是SQL Server特定的。

无论如何,我认为它不需要那么复杂

SQL="INSERT INTO Students (First_Name, Last_Name, Email) values ('"& fname &"', '"& lname &"', '"& email &"')"

应该做你想做的事情

(注意 - 您可以使用+或&amp;来连接Classic ASP中的字符串。)

编辑 - 我刚刚阅读了或多或少相同的评论。如果您的查询无效,我建议添加

Response.write SQL

在您尝试执行查询的行的紧前面的行上。它在调试方面非常有用。经典的ASP语法可以很容易地将单引号或逗号放在错误的位置

答案 2 :(得分:-1)

请将以下代码放入 trial3.asp

<% Dim fname, lname, email, stringSQL, objectCon
   fname = Request.Form("fname")
   lname = Request.Form("lname")
   email = Request.Form("email")

   Set objectCon = Server.CreateObject("ADODB.Connection")
   objectCon.ConnectionString  "Driver={SQL SERVER};Server=server_name;UID=user_name;PWD=password;Database=database_name" 'SET CONNECTION STRING OF YOUR DATABASE
   stringSQL = "INSERT INTO Students (First_Name, Last_Name, Email) VALUES ('"& fname &"', '"& lname &"', '"& email &"')"

   objectCon.Open
   objectCon.Execute(stringSQL)
   objectCon.Close() %>

答案 3 :(得分:-1)

找到答案。

谢谢大家的帮助。

Response.write SQL是一个救星 - 事实证明我有一个单引号太多,而且我的SQL间距都很糟糕。修好后,程序运行良好。

对于SQL注入问题,如果我使用变量将信息插入数据库,我是否会受到覆盖?我想我可以应用额外的参数来“清理”变量,如果需要的话......

有什么想法吗?