参数占位符
- SQL 里的
$1、$2、$3通常表示参数占位符,尤其常见于 PostgreSQL。- PostgreSQL 参数从
$1开始,不存在$0。
- PostgreSQL 参数从
- 写法的主要好处是避免 SQL 注入,同时数据库也更容易复用已经解析好的 SQL
- 因为直接通过字符串拼接容易导致SQL的注入,通过占位符参数可以避免
- 数据库会把占位参数当作值来处理,不会把参数单内容当作SQL的语法执行
- 避免手动拼接字符串参数
- 参数占位符的使用场景在业务项目上使用非常多
- 对用户的输入进行参数化
- 动态的业务数据
- orm的框架,参数的动态值实际就是利用了参数占位符实现
数据库占位符
| 数据库 / 场景 | 常见占位符 |
|---|---|
| PostgreSQL | $1, $2, $3 |
| MySQL | ? |
| SQLite | ?、?1、:name 等 |
| Oracle | :1、:name |
| SQL Server | 常见 @name |
例子
- 调用时传入参数数组:
await client.query(sql, [email, 1]);
- 对应的sql
SELECT *
FROM users
WHERE email = $1
LIMIT $2;
- 对应占位符的关系
$1 -> email
$2 -> 1