Takeo Kusama
06/29/2022, 6:00 PMselect
ra.company_id as company_id,
ra.user_id as user_id,
from companies as cs
join users as us on cs.id = us.company_id
where
user.score >= ${score}
${replacableCondition}
;
In current, my codes have many similar sql scripts for sql injection protection like above except for writing raw query in ${replacableCondition} position.Takeo Kusama
06/29/2022, 6:08 PMTakeo Kusama
06/29/2022, 6:25 PMAs with tagged templates, Prisma Client escapes all variables.
Alex Ruheni
Takeo Kusama
07/01/2022, 8:45 AMfunction someQuery (where: string[], ...parameters: QueryParameter[]) {
return prisma.$queryRawUnsafe(`select
ra.company_id as company_id,
ra.user_id as user_id,
from companies as cs
join users as us on cs.id = us.company_id
where
${where.join(' \r\n')}
;`, ...parameters)
}
Our input should be
someQuery(['company.id = $1', 'and', 'üser.id = $2'], ...[varCompanyId, userId])
if not smartly in postgresql.
More wisely, having combination in fixed position variable.
function someQuery (companyId: number | string, where: string[], ...parameters: QueryParameters[]) {
return prisma.$queryRawUnsafe(`select
ra.company_id as company_id,
ra.user_id as user_id,
from companies as cs
join users as us on cs.id = us.company_id
where
company.id = ${parameters.length + 1}
${where.join(' \r\n')}
;`
, ...parameters, companyId,
)
}
There may be more smart way, but code above was enough to my query grouping.Takeo Kusama
07/01/2022, 8:55 AM