有没有办法将每行的值从数据库中获取到数组中?

Guy*_*ver 3 coldfusion coldfusion-9

假设我有一个如下所示的查询.如果我不知道会有多少结果,那么将每个值放入数组的最佳方法是什么?通常我会用循环来做这个,但我不知道有多少结果.我是否需要运行另一个查询来首先计算结果?

<CFQUERY name="alllocations" DATASOURCE="#DS#">
    SELECT locationID 
    FROM   tblProjectLocations
    WHERE  projectID = '#ProjectName#'
</CFQUERY>
Run Code Online (Sandbox Code Playgroud)

Ada*_*ron 7

根据您对数组的要求,您可以直接引用该列以进行大多数数组操作,例如:

i = arrayLen(alllocations["locationID"]);
Run Code Online (Sandbox Code Playgroud)

使用该表示法将适用于大多数阵列操作.

请注意,这不"创建数组",这是一个简单的事情,一个查询列-一个coldfusion.sql.QueryColumn对象是非常接近CFML阵列CF能够是一个数组时,将其转换为一个需要.因此,列可以传递给数组函数.

什么人不能做到这一点:

myArray = q["locationID"];
Run Code Online (Sandbox Code Playgroud)

这是因为默认情况下,q["locationID"]如果可以,CF将视为字符串,并且字符串值是查询中locationID列的第一行中的值q.只有在实际需要数组时才会将CF转换为数组.这基本上是松散打字的工作原理.

因此,如果您只需要将查询列传递给需要数组的某个函数,则可以使用上面的语法.如果您想将列实际放入变量中,那么您需要执行以下操作:

myArray = listToArray(valueList(q.localtionID));
Run Code Online (Sandbox Code Playgroud)

注意:确保使用<cfqueryparam>过滤器值而不是将它们硬编码到SQL语句中.