SQL 与 asp 经典

Posted

技术标签:

【中文标题】SQL 与 asp 经典【英文标题】:SQL with asp classic 【发布时间】:2013-12-15 20:25:43 【问题描述】:

我正在为我的网站创建一个网站,并且正在努力处理 SQL 部分,下面是我正在努力解决的两个单独的语句,如果你知道其中任何一个可能是什么问题,我会很感激。

这是声明

readsql = "SELECT * FROM Gallery WHERE <%=GalleryRs ("img_USERID")%> = <%=session ("usr_ID")%>"

这是错误

预期语句结束

/WIP/Gallery.asp,第 20 行

readsql = "SELECT * FROM Gallery WHERE

这是第二条语句

INSERT INTO like (lik_POSTID) VALUES('" &_
request("pos_ID") & "')

还有错误

Microsoft Access 数据库引擎错误“80040e14”

INSERT INTO 语句中的语法错误。

/student/S0190204/WIP/like.asp,第 56 行

如果你能帮助任何一个,那就太好了,谢谢

【问题讨论】:

【参考方案1】:

试试

readsql = "SELECT * FROM Gallery WHERE "& GalleryRs("img_USERID")&" = "& session("usr_ID")

在 asp 代码块中没有任何意义。当你想在你的 html 代码中嵌入一个 asp 变量时——“=”符号是 Response.Write 的简写——例如

<h1><%= pagetitle %></h1>

另外请注意,我已经删除了“GalleryRs”和“Session”之后的空格

编辑

readsql = "SELECT * FROM Gallery WHERE "& GalleryRs("img_USERID")&" = '"& session("usr_ID") & "'"

【讨论】:

谢谢这让我更进一步,虽然它现在说类型不匹配。知道这意味着什么吗? GalleryRs("img_USERID") 和 session("usr_ID") 的值是多少? 类型不匹配通常发生在预期数字并且页面接收到字符串时。尝试使用“Cint(GalleryRs("img_USERID"))”和“Cint(session("usr_ID"))” GalleryRS("img_USERID") 不应该是一个字段的名称吗?那么它不能是整数。 usr_ID 是“40”,img_USER_ID 也是“40”。一个是“自动编号”,而这只是访问中的“数字”,这会导致问题吗?【参考方案2】:

当它进入数据库时​​,您的 select sql 应该如下所示:

select *
from Gallery
where img_UserId = something

您正在发送:

select * 
from Gallery
where <%= etc

您的字段名称不包括

【讨论】:

【参考方案3】:
readsql = "SELECT * FROM Gallery WHERE <%=GalleryRs ("img_USERID")%> = <%=session ("usr_ID")%>"

应该是

readsql = "SELECT * FROM Gallery WHERE " & GalleryRs("img_USERID") & " = " & session ("usr_ID")

我同意 Dan 的观点,为什么要使用变量作为字段名称?除此之外,此代码具有非常高水平的“sql 注入友好性”。至少验证 GalleryRs("img_USERID") 和 session ("usr_ID") 中的值是什么(转换为 int 或检查长度)。最好将其移至存储过程!

【讨论】:

以上是关于SQL 与 asp 经典的主要内容,如果未能解决你的问题,请参考以下文章

经典 ASP - 捕获 500 错误

经典的 ASP 奇怪的 SQL 错误

SQL Server 文本列影响返回到经典 ASP 的结果

按钮单击 asp 以删除 SQL 服务器中的行 - 经典 asp 和 vbscript

经典 ASP 跨站脚本

使用经典 ASP 检查 SQL Server 表中“标记”短语的字符串