nestjs 使用原生sql语句占位符
时间: 2024-07-06 22:01:09 浏览: 240
NestJS 是一个为 Node.js 应用程序设计的现代化、高性能的 full-stack 框架,它主要基于 TypeORM,一个强大的 ORM (对象关系映射) 模块。TypeORM 提供了对多种数据库的全面支持,并且默认使用参数化查询来防止 SQL 注入攻击。
当你在 NestJS 中使用 TypeORM 和原生 SQL 语句时,TypeORM 提供的占位符通常是 `?` 或 `$1`, `$2`, ...。这些占位符会在执行 SQL 语句时被绑定的值自动替换,例如:
```typescript
const sql = 'SELECT * FROM users WHERE id = ?';
const params = [123];
await getConnection().query(sql, params); // 将123插入到SQL中的?
```
在这个例子中,`params` 数组中的值会被安全地插入到 SQL 查询中。这种方式的好处是数据库驱动会处理转义和数据类型的匹配,提高了代码的安全性和可维护性。
如果你需要使用原生 SQL,TypeORM 提供了 `queryRaw` 方法,允许你直接使用原生字符串,此时也需要显式地提供占位符:
```typescript
const rawSql = 'UPDATE users SET name = $1 WHERE id = $2';
const values = ['John Doe', 456];
await getConnection().queryRaw(rawSql, values);
```
阅读全文