ASP NET SQL - select * from where author
Posted
技术标签:
【中文标题】ASP NET SQL - select * from where author【英文标题】: 【发布时间】:2017-04-01 20:39:30 【问题描述】:我在显示来自 SQL 数据库的相同结果时遇到问题
"select * from Log where Author=" + User.Identity.Name
这是我尝试过的当前命令,但无法正常工作。
虽然这有效:
"select * from Log where Author='markus'"
感谢您的帮助。
【问题讨论】:
您需要在 SQL 语句中的值 User.Identity.Name 周围加上引号。 "select * from Log where Author='" + User.Identity.Name + "'" 我不建议这样做,但尝试将字符串包装成单引号:"select * from Log where Author='" + User.Identity.Name + "'"
。这样做的标准方法是使用准备好的语句。
哦,当然,谢谢@SloanThrasher
@LukeRemming 你听说过 SQL 注入,对吧?你不想成为那个让它发生的无用的编码器。这就是您使用这样的代码所允许的。除非您 100% 确定这些字符串的来源,否则切勿将字符串粘合在一起形成 sql 语句。您可以使用parameterized queries 轻松编写安全代码。如果你不这样做,你就是个傻瓜。真的。
【参考方案1】:
你可以像这样将字符串用单引号括起来:
"select * from Log where Author='" + User.Identity.Name + "'"
然而,这样做的标准方法是使用参数化语句:
"select * from Log where Author = @Author";
然后使用SqlParameter
将该值应用于参数@Author
。
有关详细信息,请参阅:
Why do we always prefer using parameters in SQL statements?【讨论】:
不要这样做。 @GurV:您应该以“这就是 not 做你想做的事的方式”开头,或者将 SQL 注入的风险放在首位。寻求快速答案的人在看到您的解决方案“有效”时不会费心点击链接。【参考方案2】:尝试以下方法:
"Select * from Log where Author='" + User.Identity.Name + "'"
实际上,您的查询缺少字符串名称的单引号..
【讨论】:
说我的用户名是';drop table users;
?
@spender 其实'; drop table Log; --
会更糟。【参考方案3】:
你也可以在这种情况下使用 string.Format 方法。 请尝试以下操作。
string query=string.Format("select * from Log where Author='0'",User.Identity.Name)
【讨论】:
以上是关于ASP NET SQL - select * from where author的主要内容,如果未能解决你的问题,请参考以下文章