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 经典的主要内容,如果未能解决你的问题,请参考以下文章