这是一个老话题,但我仍然遇到问题,所以想在这里得到一些新的想法。
我曾经检查过|在参数中,但现在看来;是一个要检查的分隔符。
它建议使用带有参数的sp_executesql
来防止SQL注入,但我不确定我是否可以这样做。
我尝试做的是从客户端收集过滤器并运行动态SQL来获取结果,例如,从客户端,我可以使用以下过滤器向SQL发送请求:
id=1234 name=david date=2014/01/01
我将创建像
这样的动态sqlselect *
from members
where id = 1234
and name like 'david%'
and crea_date = '2014/01/01'
搜索列可以是表格字段的任意随机列表,因此我无法像
那样运行sp_executesql
sp_executesql N'select * from members where id=@id and name like @name and crea_date=@crea_date',N'@id int,@name nvachar(100),@crea_date datetime', ....
有什么建议吗?
答案 0 :(得分:0)
你可以使用参数,没问题。使SQL动态化,但使生成的SQL引用参数。如果需要,无条件地传入<!DOCTYPE html>
<html>
<link rel="stylesheet" text="text/css" href="movies.css">
<head>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js">
</script>
<title>
Hello World
</title>
</head>
<body>
<h1>My Favorite Movies</h1>
<input type="text" id="movie" placeholder="Movie">
<button id="enter">Enter</button>
<div id="list">Chosen Films:</div>
<script type="text/javascript">
</script>
</body>
</html>
参数,只需动态@name
子句的name like @name
部分即可。如果不搜索名称,只需忽略SQL中的参数。
如果您不想对参数名称进行硬编码,请将它们命名为where
,param1
等。
根据您的执行方式,您甚至可以在不使用时删除虚拟参数。
答案 1 :(得分:0)
默认答案:使用预备语句。