Атрибут имени cfquery, необязательный?

Является ли атрибут имени cfquery необязательным? В документе сказано, что это необходимо, но мой код работает нормально и без него. Есть ли значение по умолчанию, если оно не определено? и если да, то должен ли я локально варить его или безопасно игнорировать?

Спасибо


person Henry    schedule 27.07.2011    source источник


Ответы (2)


Я думаю, вы можете смело опустить name. По-видимому, он не добавляет значение по умолчанию name к переменным или локальным областям.

Однако я заметил кое-что странное под CF9. Если вы не используете локальную область result, ключ cfquery.executiontime добавляется в область variables. Это при отключенной отладке (если я что-то не пропустил).

Results:
Before  Variables = 1 Local = 1
After   Variables = 2 Local = 1   (result NOT local scoped)


<cffunction name="myFunction" output="true">
    <b>Before</b>
    Variables = #structCount(variables)#
    Local = #structCount(local)#<br />

    <cfquery datasource="MyDatasource">
        SELECT getDate() AS TestDate
    </cfquery>

    <b>After</b>
    Variables = #structCount(variables)#
    Local = #structCount(local)#<br />
</cffunction>
person Leigh    schedule 27.07.2011
comment
Я думаю, что связался с Adobe по этому поводу несколько лет назад, и они сказали, что это нормально, и это осталось так по причине обратной совместимости. - person Henry; 27.07.2011
comment
О, да. Я вижу про обратную совместимость. По-видимому, он существует уже некоторое время. Мне все равно это не нравится, кажется неправильным ;) cfgears.com/index.cfm/2010/3/29/ - person Leigh; 27.07.2011

Атрибут имени обязателен, но я только что проверил его, и он не выдает ошибку, если атрибут имени отсутствует... очень интересно. Хотя без атрибута name - как вы собираетесь получить набор результатов?

Какой интересный вопрос.

ОБНОВЛЕНИЕ

Просто провел быстрый тест и немного погуглил:

<cfquery  datasource="#dsn#" result="qresult">
select some_stuff from that_table limit a_bunch
</cfquery>

<cfdump var="#qresult#" />

Сброс атрибута результата ясно показывает, что запрос был выполнен и действительно получил набор результатов, хотя, похоже, нет никакого способа получить к нему доступ. Гугление и документы не помогли с настройками по умолчанию или областью действия.. возможно, пропингуйте этих парней: http://www.bennadel.com/ - я натыкаюсь на множество "экспериментов" на их сайте.

Теперь в документах говорится, что атрибут name обязателен, но я думаю, что могу видеть ситуации, когда он может быть не нужен - очевидно, что память не используется из-за отсутствия переменной name, но как насчет набора результатов? поэтому я предполагаю, что если вы запустите какой-либо запрос, в котором вам на самом деле не нужна информация из него [что-нибудь, кроме выбора?], вы можете получить всю необходимую информацию, используя атрибут результата и МОЖЕТ сэкономить немного памяти и время выполнения?

разве это не забавная мысль?

-шон

person Sean Kimball    schedule 27.07.2011
comment
Я видел запросы, которые не возвращают набор результатов (INSERT/UPDATE/DELETE) и не имеют атрибута NAME. Я не думаю, что это обязательно экономит память, но экономит на наборе текста :) - person charliegriefer; 27.07.2011
comment
если это действительно экономит память, это было бы мизерно, но я полагаю, это будет зависеть от загрузки вашего приложения, будет ли это полезно для вас или нет... правда в том, что я просто не знаю.. - person Sean Kimball; 27.07.2011