跳到主要内容

参数占位符

  • SQL 里的 $1、$2、$3 通常表示参数占位符,尤其常见于 PostgreSQL。
    • PostgreSQL 参数从 $1 开始,不存在 $0。
  • 写法的主要好处是避免 SQL 注入,同时数据库也更容易复用已经解析好的 SQL
    • 因为直接通过字符串拼接容易导致SQL的注入,通过占位符参数可以避免
    • 数据库会把占位参数当作值来处理,不会把参数单内容当作SQL的语法执行
    • 避免手动拼接字符串参数
  • 参数占位符的使用场景在业务项目上使用非常多
    • 对用户的输入进行参数化
    • 动态的业务数据
  • orm的框架,参数的动态值实际就是利用了参数占位符实现

数据库占位符​

数据库 / 场景常见占位符
PostgreSQL$1, $2, $3
MySQL?
SQLite?、?1、:name 等
Oracle:1、:name
SQL Server常见 @name

例子​

  • 调用时传入参数数组:
javascript
await client.query(sql, [email, 1]);
  • 对应的sql
sql
SELECT *
FROM users
WHERE email = $1
LIMIT $2;
  • 对应占位符的关系
text
$1 -> email
$2 -> 1