开发实战指南
SQL 格式化不等于校验,也不能防止注入
格式化用于审阅,真实数据库客户端通过预编译参数处理值,不能混淆两者。
格式化改善可读性
缩进与关键词排版让查询更易阅读,但不证明表存在、类型匹配或查询有权限执行。
格式化应选择相关 SQL 方言,不同数据库可能拒绝同一语法或赋予不同含义。
值采用参数绑定
预编译语句将 SQL 结构与数据值分开,应使用客户端支持的占位符,不拼接用户输入。
下面的问号只展示概念,PostgreSQL 和其他客户端可能使用不同占位符或绑定 API。
SELECT id, name
FROM users
WHERE email = ?;
Bind the email value with the database client.标识符需要另行约束
普通绑定参数表示值,而非任意表名、列名或排序方向,这些结构选择需要允许列表或安全查询构建器。
转义或美化完整字符串不能替代该策略,应审查每个动态片段如何进入最终语句。
生成导出也要复核
JSON 转 SQL 可准备数据迁移语句,但仍需按目标 Schema 与方言复核,并非自动执行数据库命令。
应先用可丢弃数据集并按需要结合事务,检查约束、标识符、null 和行数再使用导出。