【发布时间】:2016-04-22 08:55:53
【问题描述】:
我正在尝试从一个表中进行选择,其中表名是从一个变量中分配的,因为我使用两个不同的表。然而,它出现了一个 DB2Exception 错误。
db2Error = {"ERROR [42601] [IBM][AS] SQL0104N An unexpected token \"'TABLENAME'\" was found following \"\".
此查询是导致错误的查询 - 表名是一个包含表名的字符串。
string strUpdate = "SELECT COMMENT FROM '" + tableName + "' WHERE NUMBER = '" + strNumber + "' AND CODE = '" + c.Trim() + "' ";
这个查询工作正常 -
// string strUpdate = "SELECT COMMENT FROM TABLE WHERE NUMBER = '" + strNumber + "' AND CODE = '" + c.Trim() + "'";
是否可以为表名参数化/使用变量?
【问题讨论】:
-
检测到SQL注入的高风险!
-
你调试过你的代码并检查了'tablename'的值吗?向我们展示分配给 strUpdate 的 sql 查询字符串。你的表名是Table???
-
是的,我知道我的 SQL 注入漏洞,但需要先解决这个问题。是的,调试时表名在表名中是正确的
-
为什么你的表名有引号?除了 SQL 注入风险,我认为这是你的问题。
-
@dotctor 查询应该使用参数,可以,但不能用于表名;这会将字符串视为字符串数据并以与现在相同的方式用引号转义。无论如何,那是用户输入的可能性很低。它很可能是用于几个结构相似的表的共享函数。