Возьмем, к примеру, таблицу, предназначенную для хранения логического значения, чтобы определить, является ли пользователь администратором или нет (возможно, это не так, но это пример):
Table "public.users"
Column | Type | Collation | Nullable | Default | Storage | Stats target | Description
------------+--------------------------------+-----------+----------+-----------------------------------+----------+--------------+-------------
id | bigint | | not null | nextval('users_id_seq'::regclass) | plain | |
name | character varying | | | | extended | |
admin | boolean | | | | plain | |
bank_id | integer | | | | plain | |
Если вы получите что-то вроде этого:
'1) or id IN (select id from users where admin = true'
И это после этого интерполируется, тогда предложение select, запрашивающее пользователей с правами администратора, получит данные, которые в противном случае не появились бы. Запрос будет выполнен так, как он построен:
select * from users where bank_id IN (1) or id IN (select id from users where admin = true)
Лучше для вас полагаться на имеющийся у вас ORM и оставить его для выполнения очистки и правильных привязок для вас (это одна из причин, почему эти инструменты существуют). Например, использование ActiveRecord свяжет переданные для вас значения без особой необходимости:
User.where(bank_id: '1) or id IN (select id from users where admin = true')
# ... SELECT "users".* FROM "users" WHERE "users"."bank_id" = $1 [["bank_id", 1]]