【问题标题】:SQL statement to insert into database table not working - "Invalid column name"插入数据库表的 SQL 语句不起作用 - “列名无效”
【发布时间】:2020-06-17 23:46:23
【问题描述】:

我正在创建一个在后端使用经典 ASP 的网站。前端的表单提交到后端的经典 ASP 页面就好了。我也能够很好地连接到数据库。 (这两个我都测试过了。)

当我尝试将表单输入添加到数据库表中时,就会出现问题。 (表单方法是POST)。

这就是我想要做的——

conn.Execute "insert into table1(firstn, lastn, dato, scene) values (fn, ln, sd, sce)"

table1 以 firstn、lastn、dato 和 scene 作为其列存在。 conn 和 fn、sd、ln、sd 和 sce 变量已正确声明和初始化。

但是,我仍然收到“列名 fn 无效”错误。这是为什么呢?

我该如何解决这个错误?

【问题讨论】:

  • 每个字符串值必须用单引号括起来——或者更好的是,使用准备好的语句。投票结束这是一个错字。
  • fn 指的是您在此处表达方式的列。你的意思是变量fn
  • 使用准备好的语句和占位符值执行此操作,然后在执行时绑定数据。
  • 您将无法像这样添加表单值,而是使用ADODB.Command object to execute a parameterised query
  • @June7 "如果 SQL 注入是一个问题,使用参数"??没有“如果”,就是不去做。没有任何情况表明存在替代方案是可行的。

标签: mysql sql database forms asp-classic


【解决方案1】:

尝试使用:

conn.Execute "insert into table1(firstn, lastn, dato, scene) values (" &fn& ", " &ln& ", " &sd& ", " &sce& ")"

因此,您将在查询中输入 fnlnsdsce 作为变量而不是内容。

【讨论】:

  • firstn, lastn 最有可能是字符串,即您的示例将给出错误,因为字符串应该用单引号括起来 '
  • No user2316116,他没有指定变量或列的类型。
  • 这并不意味着它使您的答案正确。 1)您提出了一种使代码易受 sql 注入攻击的方法 2)它不适用于数值以外的值
  • 问题不在于如何防止 slq 注入以及为什么不起作用
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多