gpt4 book ai didi

typeorm - 列名作为typeorm querybuilder中的变量

转载 作者:行者123 更新时间:2023-12-05 08:11:17 24 4
gpt4 key购买 nike

这是我的原始代码,它不起作用。

this.createQueryBuilder().where(
'LOWER(:column) LIKE LOWER(:name)',
{ column: 'itemName', name: `%${options.name}%` }
);
{ "total": 0, "results": [] }

我从上面的查询中没有得到任何结果,但是当我像这样在查询中显式放置列名时,它起作用了:

this.createQueryBuilder().where(
'LOWER(itemName) LIKE LOWER(:name)',
{ name: `%${options.name}%` }
);
{"total":9, "results": [<RESULTS GOES HERE>] }

是否可以在 typeorm 的列名中使用变量?

最佳答案

我正在尝试类似的事情,并在这里偶然发现了一个(写得不是特别好)的解释:https://www.tutorialspoint.com/typeorm/typeorm_query_builder.htm

基本上,参数是为了防止 SQL 注入(inject),所以虽然很难看出幕后发生了什么,但我猜测任何字符串参数都会在最终查询中自动包含在单引号中,所以它不能解释为值以外的任何内容。

我什至尝试用单引号将参数括起来,例如

this.createQueryBuilder.where(
'":columnName" = :value',
{ columnName: 'my_column': value: 'my_value' }
);

不好。这完全阻止了参数替换并给出错误 QueryFailedError: column "$1"does not exist 并且似乎确认此功能旨在防止 SQL 注入(inject)。

如果你想动态设置列名、表名等,这确实会留下模板字符串或字符串连接。但是,出于同样的原因,这个保护措施首先存在,我会避免在用户输入时这样做。

关于typeorm - 列名作为typeorm querybuilder中的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61221423/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com