【问题标题】:SQL mistaking value for column name during updating更新期间 SQL 将列名的值误认为是
【发布时间】:2014-09-12 20:39:35
【问题描述】:

谁能告诉我为什么这些代码会显示SQL错误

列名 Poe 无效

我要么是盲人要么是智障,但我看不出这段代码中有任何错误(可能除了变量名)

更新代码:

在 index.cshtml

if(IsPost)
{
    var it = Request.Form["it"];

    db.Execute("UPDATE students SET lastname="+it+" WHERE no="+no);

    <text>
    Submitted <br />
    </text>
}

表单有问题的片段:

在 index.cshtml

<td><input type="text" name="it" value=@rw.LastName /></td>

【问题讨论】:

  • db 中的db.Execute 是什么?这是调用您自己的代码还是使用任何内置对象或框架?
  • 是的,是数据库打开指令。我忘了提。
  • 所以你应该改变它来接受一个参数集合。使用参数的示例代码是dotnetperls.com/sqlparameter

标签: sql asp.net forms post


【解决方案1】:

不带引号的字符串被视为列名。

但您应该使用参数化查询。像这样建立你的查询会让你对SQL injection开放。

所以你的 SQL 字符串应该是

    UPDATE students SET lastname=@lastname WHERE no=@no

并且在执行查询之前将参数添加到命令对象。

【讨论】:

    【解决方案2】:

    您缺少引号,因此请将您的查询更新为

    UPDATE students SET lastname='"+it+"' WHERE no="+no
    

    【讨论】:

    • 投反对票的原因?我刚刚提供了实际可行的解决方案的任何人
    • 直接从request.form 中取出值并将它们放入 SQL 字符串中要求被黑客入侵。
    • 是的,但是 OP 要求更正,我提供了 :(
    • 但是您的回答非常危险。起初对于 OP 来说它似乎可以正常工作,但是当他们把它放到互联网上时,它会暴露一个容易被利用的 SQL 注入路径(以及对于 O'Brien 等实际姓氏无法正常工作)
    • 我明白了你的意思,但是这个特殊的 OP 是关于解决阻塞的......而你的答案是关于提供另一种方法而不是解决 OP
    猜你喜欢
    • 1970-01-01
    • 2012-05-05
    • 1970-01-01
    • 1970-01-01
    • 2021-02-06
    • 2023-03-31
    • 2012-12-21
    • 1970-01-01
    • 2012-12-30
    相关资源
    最近更新 更多