ColdFusion и получение данных из MySQL - PullRequest
4 голосов
/ 09 января 2009

Я работаю на сайте CF и мне нужно получить данные из таблиц MySQL.

Я могу создать штраф CFQuery и проверить возвращаемые записи, но как мне взять возвращенные записи, просмотреть их циклически и получить данные из определенных полей каждой строки.

Я могу написать, если if / end if и т. Д., Я просто не помню, как получить доступ к данным.

1007 * Джейсон *

Ответы [ 5 ]

10 голосов
/ 09 января 2009

Предполагается, что вы сделали запрос the_query со столбцом имени:

<cfoutput query="#the_query#">
   #firstName# ... etc <br>
</cfoutput>
8 голосов
/ 09 января 2009

Все существующие ответы / комментарии, похоже, касаются разных аспектов, поэтому это попытка объединить всю эту информацию в одно четкое объяснение.
(Этот ответ задан для сообщества вики - отредактируйте его соответствующим образом.)


Чтобы получить доступ к переменной из запроса, используйте:

QueryName.ColumnName[RowNum]
QueryName["ColumnName"][RowNum]

Они оба будут работать в любой момент после создания запроса.
Оба могут использоваться внутри cfoutput для отображения переменной или внутри cfset для назначения переменной.

Второй полезен для динамических переменных и может принимать переменные следующим образом:

QueryName[DynamicColumnName][RowNum]
QueryName["Partial#DynamicName#"][RowNum]
QueryName["Partial"&DynamicName][RowNum]

Для удобства вместо ручного выполнения запроса:

<cfloop index="CurrentRow" from="1" to="#QueryName.RecordCount#">
    <cfoutput>#QueryName.ColumnName[CurrentRow]#</cfoutput>
</cfloop>

Вы можете просто сделать:

<cfloop query="QueryName">
    <cfoutput>#QueryName.ColumnName[CurrentRow]#</cfoutput>
</cfloop>

И в качестве дальнейшего ярлыка вы можете сделать:

<cfoutput query="QueryName">
    #QueryName.ColumnName[CurrentRow]#
</cfoutput>

А если внутри <cfloop query=""> или <cfoutput query=""> вы можете просто сделать:

<cfoutput query="QueryName">
    #ColumnName#
</cfoutput>

Однако этот последний ярлык предназначен только для отображения - если вы сделаете:

<cfset ColumnName = "NewValue" />

Это не изменит исходные данные запроса. Вместо этого вам нужно сделать:

<cfset QueryName.ColumnName[CurrentRow] = "NewValue" />

И это изменит результаты запроса (но не значение в базе данных).


Чтобы отобразить фактический запрос SQL, который был запущен, с CF8 (также Railo и OpenBD), вы можете сделать:

<cfdump var="#QueryName#"/>

И он покажет вам как результаты запроса, так и фактический SQL, который был выполнен.

Чтобы отобразить фактический SQL с CF7, вам нужно добавить result="QueryInfo" к вашему тегу cfquery, тогда <cfdump var="#QueryInfo#"/> покажет вам SQL.

5 голосов
/ 09 января 2009

Кроме того, вы можете использовать тег CFLOOP для аналогичного эффекта

Скажем, например, что вы хотите суммировать поле "цена" для тех строк, количество которых больше нуля. (представьте себе корзину)

<CFSET TOTAL=0>
<CFLOOP QUERY="the_query">
    <CFIF quantity gt 0>
        <CFSET TOTAL=TOTAL+PRICE>
    </CFIF>
</CFLOOP>

Кстати, использование хеш-меток / знаков фунта / октоторпа не рекомендуется в параметре запроса CFOUTPUT

[править:] Чтобы вывести содержимое стека запросов, добавьте в [cf_root] \ wwwroot \ WEB-INF \ debug.cfm перед строкой «<! --- :: CFTimer :: --->»:

<CFIF IsDefined("DumpQueries") >
    <cfset DQ_Queries= QueryToArray( CFDEBUG_QUERIES ) />    
    <CFLOOP From="1" to ="#CFDEBUG_QUERIES.recordcount#" index="i">
        <CFSET DQ_Queries[i].BODY =  DQ_Queries[i].BODY >
        <CFSAVECONTENT Variable="dump_content">
        <CFDUMP Var="#DQ_Queries[i]#" Expand="NO" Label="#DQ_Queries[i].NAME#">
        </CFSAVECONTENT>
        <CFOUTPUT>#REReplaceNoCase(dump_content,"expand"">BODY</td>[[:space:]]*<TD>[[:space:]]*","expand"">BODY</td><td><PRE>")#</CFOUTPUT>     
    </CFLOOP>
</CFIF>
2 голосов
/ 09 января 2009

Есть несколько способов сделать это. как отмечено выше, вы можете использовать cfoutput с атрибутом запроса. Вы также можете ссылаться на 'queryname.columnname'.

Если вам нужен доступ к определенной строке / столбцу, вы можете использовать обозначение массива следующим образом:

queryname.columnname[rownum]

(помните, CF считается от 1, а не от 0). Для динамического доступа к столбцу вы можете использовать

queryname[columnvariable][rownum]

Если ваш столбец является недопустимым именем переменной в CF (например, 8thCol), вы можете немного изменить это:

queryname['8thCol'][rownum]

Надеюсь, это поможет.

0 голосов
/ 09 января 2009

как только вы определили свой запрос в CFQUERY, вы поместите свои результаты в тег CFOUTPUT. Вы должны указать поля для отображения, используя синтаксис # [имя запроса]. [Имя поля] #.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...