我继承了一个大型的传统ColdFusion应用程序.这里有数百个<cfquery>某些sql #variable#</ cfquery>语句,需要按照以下方式进行参数化:<cfquery>这里有一些sql <cfqueryparam value ="#variable#"/> </ cfquery>
如何以编程方式添加参数化?
我曾考虑过编写一些正则表达式或sed/awk'y类型的解决方案,但似乎有人在某个地方解决了这个问题.为自动推断sql类型而获得的奖励积分.
如何在不使用cfqueryparam的情况下编码/转义varchar以更安全?我想实现相同的行为,而不是<cfqueryparam>用来解决"在这个RPC请求中提供的参数太多.最大值是2100"的问题.请参阅:http://www.bennadel.com/blog/1112-Incoming-Tabular-Data-Stream-Remote-Procedure-Call-Is-Incorrect.htm
更新:
<cfquery>?mysql_real_escape_string()可能类似的东西?我需要动态构造一组 JOIN 语句,其中表名和列名是从另一个 ColdFusion 查询传入的。将字符串值传递到语句中时,CFQUERYPARAM 在其周围添加单引号 - 这是 CFQUERYPARAM 要点的一部分。鉴于这会破坏 SQL 语句,在这种情况下不使用 CFQUERYPARAM 而是确保传入的查询被清理是否可以接受,或者是否有办法允许使用 CFQUERYPARAM?(我可以使用 Fusebox 中的电路/熔丝权限锁定这些代码片段。)
谢谢。
假设有一个SQL表 Fruit
id | name
--- ------
1 | 'apples'
2 | 'pears'
3 | 'kiwi'
4 | 'bananas, peaches and plumbs'
Run Code Online (Sandbox Code Playgroud)
鉴于以下查询
<cfquery name="qAllFruit" datasource="#DSN#">
SELECT name FROM Fruit
</cfquery>
<cfquery name="qLeftoverFruit" datasource="#DSN#">
SELECT name FROM Fruit
WHERE name NOT IN (<cfqueryparam CF_SQL_TYPE="CF_SQL_VARCHAR"
value="#ValueList(qAllFruit.name)#"
list="yes" />)
</cfquery>
Run Code Online (Sandbox Code Playgroud)
然后qLeftoverFruit将错误地返回1行:bananas, peaches and plumbs因为扩展cfqueryparam列表被错误地解释:
WHERE name NOT IN ('apples','pears','kiwi','bananas','peaches and plumbs')
Run Code Online (Sandbox Code Playgroud)
有没有办法在仍然使用cfqueryparam标签时纠正这个问题ValueList?
更新以下是您可以用来重现此问题的要点:http://gist.github.com/a642878c96b82b21b52c
我想防止SQL注入攻击.我们有一个表单,要求用户的AD用户名和密码.然后我们的处理代码看起来像这样:
<cfldap name="ldap_result" action="query" server="999.999.999.999"
attributes="userprincipalname,title,samaccountname,sn,name,mail,cn"
filter="(&(objectclass=user)(sAMAccountName=#form.username#))"
start="dc=us,dc=company,dc=lan"
scope="subtree"
username="US\#form.username#"
password="#form.password#">
Run Code Online (Sandbox Code Playgroud)
如果没有cfqueryparam,我将永远不会使用用户输入运行查询(包装用户名和密码输入),但这样的内容甚至可用于cfldap?(如果这有所不同,我们将使用CF10.)
更新:
为了澄清,当我尝试这个时,我得到以下错误:
标记CFLDAP的属性验证错误.它不允许属性CFSQLTYPE,VALUE.
cf_sql_longvarchar我可以增加一个字符限制,或者可能是另一种选择吗?它似乎被切断为43,479个字符或大约40-45 kb.
我有几个表单字段,用户可以输入whole数字,decimal数字和两种类型可以是正面或负面.换句话说,他们可以输入这样的东西:
1 or 0.9 or 5.6745 or -10 or -0.9 or -10.5435
Run Code Online (Sandbox Code Playgroud)
我想知道我应该cfqueryparam在cfsqltype上使用什么?我尝试了十进制,但看起来在ColdFusion 9中不支持.有没有其他选项或我应该使用varchar?
这是我的查询.
<cfquery name="qryname" datasource="dsn">
UPDATE ticketlist
SET status = <cfqueryparam cfsqltype="CF_SQL_VARCHAR" value="Expired">
WHERE expdatetime <
<cfqueryparam value = "#yourDate#" cfsqltype = "CF_SQL_DATE" maxLength = "19">
</cfquery>
Run Code Online (Sandbox Code Playgroud)
它能够给我所有结果,他们的expdatetime小于#yourdate#,唯一的问题是它只显示结果谁的差异是一整天,但不是那些差异在最小.因此,expdatetime的差异小于#thertime#by min's将不会显示在结果中,除非差异至少为一天.
如何针对最小精度优化此查询?
我知道两个可能有用的函数,DateDiff和DateCompare,但我不知道如何在查询中应用它们.
DateDiff("datepart","date1","date2")
DateCompare("date1","date2"[,"datePart"])
DatePart精确度
* s Precise to the second
* n Precise to the minute
* h Precise to the hour
* d Precise to the day
* m Precise to the month
* yyyy Precise to the year
Run Code Online (Sandbox Code Playgroud)
任何帮助将不胜感激.
我做了一些蠢事,但我不知道它是什么,有人能指出我为什么会收到这个错误:
Parameter index out of range (1 > number of parameters, which is 0).
Run Code Online (Sandbox Code Playgroud)
从这段代码,
这种形式:
<form id="form1" name="form1" method="post" action="?template=/Assets/Plugins/AmericanSurcharges/index.cfm&action=add" class="inputform">
<tr>
<td>
<select name="datamonth">
<option value=""></option>
<cfloop from="1" to="12" step="1" index="i">
<cfset option = monthasstring(i) />
<option value="#i#" >#option#</option>
</cfloop>
</select>
</td>
<td><input name="201data" type="text" id="201" size="6" maxlength="7" value="" class="data" /></td>
<td><input name="301data" type="text" id="301" size="6" maxlength="7" value="" class="data" /></td>
<td><input name="304data" type="text" id="304" size="6" maxlength="7" value="" class="data" /></td>
<td><input name="316data" type="text" id="316" size="6" maxlength="7" value="" class="data" /></td> …Run Code Online (Sandbox Code Playgroud) 一,代码.我正在制作一个查询结构:
<cfset myQueryStruct = {
qone = "select * from t1 where column = <cfqueryparam cfsqltype='cf_sql_varchar' value='#arguments.a1#'>",
qtwo = "select * from t2 where column = <cfqueryparam cfsqltype='cf_sql_varchar' value='#arguments.a1#'>"
}>
Run Code Online (Sandbox Code Playgroud)
我需要动态执行查询,如下所示:
<cfquery name="qName" datasource="#dsn#">
#myQueryStruct[arguments.type]#
</cfquery>
Run Code Online (Sandbox Code Playgroud)
但我收到一个错误:
Error Executing Database Query.
[Macromedia][SQLServer JDBC Driver][SQLServer]Incorrect syntax near '<'.
Run Code Online (Sandbox Code Playgroud)
似乎错误与<cfqueryparam cfsqltype='cf_sql_varchar' value='#arguments.a1#'>查询中的" "("<")有关
我尝试使用evaluate()并收到此错误:
Invalid CFML construct found on line 1 at column 15.
ColdFusion was looking at the following text:
t1
Run Code Online (Sandbox Code Playgroud)
我知道我们可以通过<cfif>在里面使用梯子来做到这一点,<cfquery>但我的问题是,我们可以像我提到的那样 …
我有一个输入复选框字段,用户可以在其中选择表单中的多个复选框,并且根据他们选择的内容,它将创建一个 id 字符串,如 10、14、35、47,并将其提交到数据库。如果我直接提交它,我可以提交这个,如下所示:
user_job_type_id="#form.user_job_type_id#",
Run Code Online (Sandbox Code Playgroud)
但是,如果我尝试将它包装在 cfqueryparam 中,我宁愿这样做以使其更安全,无论我做什么,我都会收到错误消息。无论我是否将它设置为列表 true 或 false、varchar、integer,一切都会引发错误,例如 cfqueryparam 不接受列表。
例如,下面将不起作用
user_job_type_id=<cfqueryparam cfsqltype="CF_SQL_VARCHAR" value="#form.user_job_type_id#" list="Yes"/>,
Run Code Online (Sandbox Code Playgroud)
我在这里缺少什么?
这是我的coldfusion代码:
SELECT
MIN(legacy_sale_id) AS legacy_sale_id ,
cc_id ,
??_name ,
sales_rep_name ,
original_sale_id ,
ls.id ,
<cfif ARGUMENTS.is_export neq 0>
CASE site_id
WHEN 4 THEN 'EU'
END as site_id,
<cfelse>
site_id ,
</cfif>
gp_order ,
SUM(item_price_usd * qty) AS value_usd,
SUM(item_price_original * qty) AS value_original,
co.total_sales_orders
FROM
ls
LEFT JOIN cc
ON
cc.company_id = ls.id
LEFT JOIN
(
SELECT
company_id,
COUNT(ll.id) AS total_sales_orders
FROM
ls ll
WHERE
cc_id IS NOT NULL
AND site_id IN (1,4)
GROUP BY
cc_id
) co …Run Code Online (Sandbox Code Playgroud) cfqueryparam ×12
coldfusion ×12
cfquery ×5
coldfusion-8 ×1
coldfusion-9 ×1
decimal ×1
mysql ×1
refactoring ×1
sql ×1
sql-server ×1