【发布时间】:2017-08-26 03:56:53
【问题描述】:
我已经开始在页面上遇到错误,并且正在努力找出导致此问题的原因。我在 Stack Overflow 上搜索了同样的错误消息,发现有些人也得到了它,但那里的解决方案与我的非常不同。这是我收到的错误消息:
用于 ODBC 驱动程序的 Microsoft OLE DB 提供程序错误“80040e14”
[Microsoft][ODBC SQL Server Driver][SQL Server]'=' 附近的语法不正确。
/test-page.asp,第 97 行
这与该 .asp 页面上的这一行有关:
set rsMainContact=oConn.execute
("SELECT * FROM tbl_individual WHERE individual_id="&iMainContact)
现在奇怪的是,页面实际上提供了正确的数据,它从该表中获取了它需要的所有数据。这就是为什么我不明白为什么会出现问题。
此外,当我使用 MSSQL 中的“SELECT * FROM tbl_individual WHERE individual_id="&iMainContact" 语句运行查询时,将 &iMainContact 替换为实际变量,它工作得非常好。
有人知道为什么会出现这个错误吗?
如果您想知道各种变量的来源,那么这也是页面中的一些相关代码:
SET rsOrganisationPendingOrganic=Server.CreateObject("ADODB.RecordSet")
rsOrganisationPendingOrganic.CursorType=3
rsOrganisationPendingOrganic.Open sSQL, oConn
iOrganisationPendingOrganicCount=rsOrganisationPendingOrganic.RecordCount
iMainContact=rsOrganisationPendingOrganic("organisation_maincontact")
【问题讨论】:
-
请使用参数而不是连接 SQL 查询文本并阅读 SQL 注入。
-
嘿@lad2025,谢谢。 “参数而不是连接 SQL 查询文本”是什么意思。您的意思是使用“&iMainContact”以外的其他方式引用变量吗?
-
你的 asp 页面上的那一行代码是像你这里的 2 行,还是只有一行,问题中的格式将它分成了 2 行?如果是 2 行,则需要使用 vbscript 字符串连接来连接它们。见Breaking a String Across Multiple Lines 还有
individual_id是什么类型?它是字符串还是整数/数字?如果是后者,那么就可以了,前者并且您忘记了围绕该值的引号。确实,除非您想处理可能的 sql 注入攻击并手动转义所有字符串值,否则您需要使用参数 -
出错时
iMainContact的值是多少?
标签: sql sql-server asp-classic