флажок cfqueryparam передать в список из ввода

#coldfusion #cfquery #cfqueryparam

Вопрос:

У меня есть поле ввода флажка, в котором пользователь может выбрать несколько флажков в форме, и в зависимости от того, что он выберет, он создаст строку идентификаторов, например 10,14,35,47, и она будет отправлена в базу данных. Я могу отправить это, если просто отправлю его напрямую, как показано ниже:

 user_job_type_id="#form.user_job_type_id#",
 

Но если я попытаюсь завернуть это в cfqueryparam, что я бы предпочел сделать, чтобы сделать его более безопасным, я получу ошибку, независимо от того, что я делаю. Независимо от того, устанавливаю ли я его в список true или false, varchar, целое число, все выдает ошибку, например cfqueryparam не принимает список.

Например, ниже не будет работать

 user_job_type_id=<cfqueryparam cfsqltype="CF_SQL_VARCHAR" value="#form.user_job_type_id#" list="Yes"/>,
 

Что я здесь упускаю?

Комментарии:

1. В чем заключается ошибка, которую вы получаете?

2. Если вы пытаетесь выполнить поиск по нескольким идентификаторам, синтаксис sql неверен. Оператор equals = сравнивает только отдельные значения. Для нескольких значений используйте IN (...) . т. е. where user_job_type_id IN ( <cfqueryparam list ....> ) . Более подробную информацию смотрите в документации по СУБД.

Ответ №1:

Как упоминал @SOS, вам нужно использовать IN оператор при проверке списка значений в круглых скобках. Кроме того, поскольку все значения являются целыми числами, обязательно укажите правильные cfsqltype . Это гарантирует правильную проверку типа даты для каждого элемента в списке.

Неправильный:

 user_job_type_id = <cfqueryparam cfsqltype="CF_SQL_VARCHAR" value="#form.user_job_type_id#" list="Yes"/>,
 

Лучше:

 user_job_type_id IN (<cfqueryparam cfsqltype="CF_SQL_VARCHAR" value="#form.user_job_type_id#" list="Yes"/>),
 

Лучшие:

 user_job_type_id IN (<cfqueryparam cfsqltype="CF_SQL_INTEGER" value="#form.user_job_type_id#" list="Yes"/>),
 

Комментарии:

1. Спасибо, я все же пытаюсь вставить в базу данных, а не запрашивать. Таким образом, это был бы пример: ` обновите задание пользователя, установите идентификатор типа пользователя @ job_type_id=<cfqueryparam cfsqltype=»CF_SQL_VARCHAR» значение=»#form.user_job_type_id#» список=»Да»/> где идентификатор пользователя @ job_id= #form.user_job_id# ` » Это приводит к ошибке при использовании cfqueryparam. Если я не использую cfqueryparam и делаю следующее, это работает нормально, хотя я предпочитаю использовать cfqueryparam, если это возможно: « обновите user_job, установите user_job_type_id=user_job_type_id=»#форма.user_job_type_id#», где user_job_id= #форма.user_job_id#«

2. У вас есть способ связать элементы в #form.user_job_type_id# с элементами в #form.user_job_id#? Затем пройдите по списку, чтобы выполнить вставку.

3. Список хранится в одной ячейке базы данных в виде списка, разделенного запятыми. Так что, например, это будет выглядеть как «49,56,87». Я не могу понять, почему cfqueryparam не нравится список, разделенный запятыми.

4. В этом случае удалите атрибут списка и просто вставьте его в виде строки. Атрибут списка больше подходит для where x in () предложений.