我正在学习使用<cfscript>.
有什么办法可以记录< cfscript>?里面的一些消息或值吗?
像<cfscript>我可以使用的外部<cflog>,有没有任何方式或标记类似的东西,我可以用来打印日志文件里面的消息>
谢谢
一直在查看我的前任代码,并经常查看"请求"范围的用法.该范围的适当用法是什么?
补充:使用SQL Server 2000和2005,因此必须同时使用它们.另外,value_rk不是数字/整数(错误:操作数数据类型uniqueidentifier对于min运算符无效)
当我不关心返回的其他列时,有没有办法做单列"DISTINCT"匹配?例:
**Table**
Value A, Value L, Value P
Value A, Value Q, Value Z
Run Code Online (Sandbox Code Playgroud)
我需要根据第一行(值A)中的内容返回其中一行.我仍然需要来自第二和第三列的结果(第二列实际上应该全部匹配,但第三列是唯一的键,我至少需要其中一个).
这是我到目前为止所得到的,尽管它显然不起作用:
SELECT value, attribute_definition_id, value_rk
FROM attribute_values
WHERE value IN (
SELECT value, max(value_rk)
FROM attribute_values
)
ORDER BY attribute_definition_id
Run Code Online (Sandbox Code Playgroud)
我在ColdFusion工作,所以如果有一个简单的解决方法,我也会对此持开放态度.我试图限制或"分组"第一列"值".value_rk是我的大问题,因为每个值都是唯一的,但我只需要一个.
注意:value_rk不是数字,因此这不起作用
更新:我有一个工作版本,它可能比纯SQL版本慢一点,但说实话,任何工作在这一点上都比没有好.它从第一个查询获取结果,执行第二个查询,但将结果限制为一个,并获取匹配值的匹配value_rk.像这样:
<cfquery name="queryBaseValues" datasource="XXX" timeout="999">
SELECT DISTINCT value, attribute_definition_id
FROM attribute_values
ORDER BY attribute_definition_id
</cfquery>
<cfoutput query="queryBaseValues">
<cfquery name="queryRKValue" datasource="XXX">
SELECT TOP 1 value_rk
FROM attribute_values
WHERE value = '#queryBaseValues.value#'
</cfquery>
<cfset resourceKey = queryRKValue.value_rk>
...
Run Code Online (Sandbox Code Playgroud)
所以你有它,在ColdFusion中明显选择一个列.任何纯SQL Server 2000/2005建议仍然非常受欢迎:)
我有几个查询,我使用cfquery标记的cachedwithin ="#CreateTimespan(...)#"属性进行缓存.有时我需要清除缓存(或者只是重新执行查询以获取新的缓存副本).从历史上看,我已经完成了两件事之一 -
这些选项都不是很好,特别是在生产中.我不是要求我如何以编程方式使缓存过期(虽然,这会很好!),但更简单 - 如何清除服务器上的缓存查询而不必诉诸上述两种方法之一?我很高兴听到在服务器范围或应用程序范围内工作的方法,甚至是如何使特定的缓存查询过期.谢谢!
如何处理CFML中的时区?到目前为止,我编写的所有应用程序都只使用CF服务器和/或SQL服务器的默认时区.
你们通常做什么?您是否使用GetTimezineInfo()和DateAdd()将所有日期存储在GMT中,并根据登录用户的偏好将所有时间转换为正确的时区?
或者你们使用任何java方法?
从恶意用户那里获取coldfusion网页的最佳做法是什么?(包括但不限于sql注入攻击)
cfqueryparam足够吗?
我在ColdFusion中编码,但是试图留在cfscript中,所以我有一个函数允许我传入一个查询来运行它
<cfquery blah >
#query#
</cfquery>
但不知何故,当我构建查询sql = "SELECT * FROM a WHERE b='#c#'" 并将其传入时,ColdFusion已将单引号替换为2个单引号.所以它变成 WHERE b=''c''了最后的查询.
我尝试过很多不同的方法创建字符串,但我不能只留下一个引用.即使进行字符串替换也没有效果.
知道为什么会这样吗?在这个项目期间,它破坏了我在cfscript中生活的希望
我很好奇当你传递一个列表时,maxlength属性如何在CFQUERYPARAM中工作.maxlength是否适用于整个列表的长度(即长度为"1,2,3,4,5,6"= 11)?或者maxlength是否适用于列表中的每个项目?
我找不到任何这方面的文件.
所以,鉴于我有一个这个组件的实例:
foo.cfc
<cfcomponent>
<cffunction name="locateMe">
<cfreturn "I don't know where I live!">
</cffunction>
</cfcomponent>
Run Code Online (Sandbox Code Playgroud)
而且,这个其他组件,fooParent.cfc:
<cfcomponent>
<cfset this.foo = createObject("component", "foo")>
</cfcomponent>
Run Code Online (Sandbox Code Playgroud)
假设我用几种不同的方式创建"foo"的实例:
<cfset myStruct = {}>
<cfset myStruct.foo = createObject("component", "foo")>
<cfset myFoo = createObject("component", "foo")>
<cfset myFooParent = createObject("component", "fooParent")>
<cfoutput>
#myStruct.foo.locateMe()#<br>
#myFoo.locateMe()#<br>
#myFooParent.foo.locateMe()#<br>
</cfoutput>
Run Code Online (Sandbox Code Playgroud)
正如所料,这输出:
I don't know where I live!
I don't know where I live!
I don't know where I live!
Run Code Online (Sandbox Code Playgroud)
我想知道的是,我可以在foo.cfc中做些什么来告诉我关于它被调用的上下文的内容(任何事情!)?因为一切最终都存在于(至少)某种范围内,并且所有范围都是一种对象,我所说的是我真的想从某个给定的实例化对象中确定包含对象的某种方式.最后,从上面的示例代码片段构建foo.cfc的某种方式,以便这样的东西可以作为我的输出:
I live within a "class coldfusion.runtime.Struct" instance!
I live within a …Run Code Online (Sandbox Code Playgroud) 我一直在探索构建我的ColdFusion应用程序的不同方法,并且我正在寻找关于提供应用程序范围UDF的最佳方法的一些意见.
对于我的每个应用程序,我通常使用一些并不真正属于任何特定对象的额外函数.主要是数据操作.我希望这些功能在我的应用程序中可用,既可用于CFM模板,也可用于应用程序实例化的CFC.
我看到它的方式有各种方法来实现这一点,但它们都有自己的局限性:
在应用程序范围中实例化基本Utils CFC.这是我经常使用的方法.所有的功能都可以在应用程序范围内使用,但如果我从多个应用程序实例化相同的CFC,那么它们每个都有自己的应用程序范围 - 这意味着每个都必须实例化自己的基础Utils CFC.这没有什么不对,但感觉我没有足够好地封装CFC.我并不热衷于从CFC中引用应用程序范围.
创建一个基础Utils CFC并使其他所有CFC扩展它.这样可以正常工作,这意味着CFC可以直接从CFC的THIS范围引用Utils功能 - 但这意味着Utils功能保存在每个CFC的内存中.它在概念上也不合适,因为我的其他CFC与Utils CFC没有任何关系.
将我的基础Utils CFC注入我的其他CFC.我一直在玩的另一种方法是在Application范围中实例化我的基础Utils CFC,然后将其作为对象传递给我的其他CFC中的参数.这在概念上和我的封装中都适用.与我在init方法中设置数据源的方式相同,我可以对UDF执行相同的操作.这与UDF包含在每个CFC中的问题相同.当我转储所有的CFC时,我多次得到每个UDF - 但是当我传递一个实例化的对象时,我假设它没有占用任何额外的内存空间.如果有人能证实这一点,那会很有帮助 - 我只是假设!我对这种方法唯一真正的问题是它似乎有点复杂.
让我的应用程序CFC扩展我的Utils CFC.这就是许多框架似乎要做的事情.我没有使用过这种方法,但我确信它有利有弊.
CF直接在Application.cfc中从单独的模板中包含我的UDF这在功能上类似于在Application范围中实例化.
将我的UDF添加到服务器中Components.cfc
这是一个理论上的好主意 - 我可以维护基本Utils的一个副本,并确保服务器上的所有内容都可以访问它们 - 但是,如果我想在多个服务器上运行应用程序,那么它们都将全部需要那些功能.此外,对服务器的任何更新都可能会覆盖组件.它只是感觉像黑客核心 - 我敢肯定我们可以从苦涩的经历中得到所有,这很糟糕.
所以 - 我的问题是:以优雅和可重用的方式扩展CF与UDF的最佳实践是什么?以上任何选项或我没想过的东西?
cfml ×10
coldfusion ×10
railo ×5
cfc ×2
sql ×2
cfqueryparam ×1
datetime ×1
java ×1
list ×1
lucee ×1
maxlength ×1
security ×1
sql-server ×1
string ×1
timezone ×1