ColdFusion queryExecute параметры объекта? - PullRequest
1 голос
/ 25 июня 2019

Я недавно начал использовать cfscript в своих проектах. При работе с cfscript я использовал функцию queryExecute() для выполнения запросов. В нескольких ситуациях было несколько запросов в одной и той же функции. Эти запросы имеют одни и те же параметры. Мне было интересно, могу ли я иметь одну структуру, которая будет содержать все параметры для всех запросов. Вот что я попробовал:

local.qryParams = structNew();
structAppend(qryParams, {rec_id = {cfsqltype="cf_sql_numeric", value="#arguments.rec_id#"}});
structAppend(qryParams, {position = "#application.position#"});
structAppend(qryParams, {user_id = "#client.userid#"});
structAppend(qryParams, {title = {cfsqltype="cf_sql_varchar", value="#arguments.title#", maxlength: 50}});
structAppend(qryParams, {description = {cfsqltype="cf_sql_varchar", value="#arguments.description#", maxlength: 1000}});

Тогда у меня есть две переменные с SQL:

local.insertSQL = "
    INSERT INTO notes(rec_id, title, description, user_id, last_update) 
    VALUES (:rec_id, :title, :description, :user_id, getDate())
";
local.updateSQL = "
    UPDATE profile
    SET last_update = getDate(),
        user_id = :user_id
    WHERE rec_id = :rec_id
        AND position = :position
";

Тогда в самом конце у меня есть две функции исполнения:

queryExecute(insertSQL, qryParams , {datasource="#application.datasource#", result: "insertResult"});
queryExecute(updateSQL, qryParams , {datasource="#application.datasource#", result: "updateResult"});

Обе функции успешно выполнены, и запись была вставлена ​​/ обновлена. Мои вопросы:

  • Это хороший подход для хранения всех параметров запроса в одной структуре?
  • Есть ли потенциальная проблема или проблема безопасности, делающая это таким образом?
  • Есть предложения / комментарии?

Спасибо!

1 Ответ

3 голосов
/ 25 июня 2019

Это вид открытого вопроса, но здесь идет

Q1: Это хороший подход для хранения всех параметров запроса в одной структуре?
A1: Да, но вы можете рассмотреть возможность использования сущностей, если вам это нравится.

Q2: Есть ли потенциальная проблема или проблема безопасности, делающая это таким образом?
A2: Ничего из того, что я знаю

Q3: Есть предложения / комментарии?
A3:

  1. Если ваш источник данных находится в application.cfc, вам не нужно подробно описывать его.

  2. Вы получаете результат трудным путем. Рассмотрим myResult=QueryExecute(...)

  3. Вы можете построить структуру за один выстрел. Вам не нужны все эти structAppend() с. structNew() слишком много печатать. Рассмотрим {}.

  4. user_id = "#client.userid#" слишком много печатать ... Достаточно user_id = client.userid.

  5. Вы изменили стили строительных конструкций {cfsqltype="cf_sql_varchar", value="#arguments.title#", maxlength: 50}. ИМХО, используйте : вместо =

Надеюсь, это полезно

...