乐闻世界logo
搜索文章和话题

TypeORM 如何使用参数执行原始查询

6 个月前提问
5 个月前修改
浏览次数30

1个答案

1

在 TypeORM 中执行原始查询是一个直接而有效的操作,特别是当你需要进行一些特定的数据库操作,或者ORM提供的方法无法满足需求时。为了安全地执行原始查询,尤其是当查询涉及到外部输入的参数时,我们需要利用参数化查询来预防SQL注入攻击。

以下是一个具体的例子,说明如何在TypeORM中使用参数执行原始查询:

首先,你需要确保已经创建了一个 DataSource实例,并且成功连接到你的数据库。以下是一个简单的参数化查询的示例,假设我们要从 user表中查询特定ID的用户信息:

typescript
import { DataSource } from 'typeorm'; async function findUserById(dataSource: DataSource, userId: number) { const query = 'SELECT * FROM user WHERE id = $1'; // 使用$1作为参数的占位符 const result = await dataSource.query(query, [userId]); // 将userId作为参数传递 return result; }

在这个例子中,$1是参数的占位符(注意不同的数据库可能使用不同的占位符,例如MySQL可能使用 ?),[userId]是一个数组,它包含了所有的参数,按照它们在SQL查询中出现的顺序。当你调用 dataSource.query方法时,TypeORM会自动将参数替换到查询中的占位符,并且以安全的方式执行这个查询,从而避免SQL注入的风险。

这种方法的好处是显而易见的:

  1. 安全性:通过使用参数化查询,可以有效防止SQL注入攻击。
  2. 灵活性:即使是复杂的SQL查询也可以通过传递不同的参数来重用。
  3. 性能:数据库可以优化执行计划,因为SQL语句的结构在多次调用中保持不变,只是参数在变。
2024年6月29日 12:07 回复

你的答案