大家好,我正在尝试查找所有包含a的结果。我尝试了几种方法,但问题是没有任何效果。它只返回一个空数组
var data = await getRepository(User)
.createQueryBuilder("user")
.where("user.firstName = %:name%", { name: firstName })
.getMany();
和类似的东西
var data = await getRepository(User)
.createQueryBuilder("user")
.where("user.firstName like %:name%", { name: firstName })
.getMany();
但是什么都不起作用。2所有这些都返回给我一个空数组。3有人能帮我吗,谢谢
6条答案
按热度按时间mpgws1up1#
正确的做法是:
mfuanj7w2#
TypeORM提供开箱即用的
Like
函数。示例来自他们的文档:在您情况下:
3bygqnnd3#
您也可以使用数据库函数进行连接,例如:
8e2ybdfx4#
看起来所有的答案(包括pleerock接受的答案)都容易受到SQL注入的攻击,除非用户输入事先经过了净化。
上述代码在TypeORM中有效的事实使得这种风格的任何查询都容易受到数据泄漏的攻击。
来自包含
%
字符的用户的未净化数据在上述查询中被发送到firstName
(例如let firstName = '%John'
),这将允许用户泄露关于其他用户的潜在私有数据。因此,在用例允许的情况下,应该确保任何用户输入都经过净化,任何特殊字符都被删除。
或者,在MySQL中,当用例要求文本中存在特殊字符时,全文搜索可能更合适,但这需要更高的维护成本。
在相关列上创建全文搜索并执行查询
i1icjdpr5#
我就是这么做的希望能帮上忙
axzmvihb6#
使用仓库我把它放在where例如: