这是一个方便的函数,可以通过自动转义输入中的所有表达式来防止 sql 注入攻击(在 dplyr 的上下文中很可能是意外而不是故意的),同时将裸字符串视为 sql。这不太可能阻止任何严重的攻击,但应该使您不太可能生成无效的 sql。
细节
仅当生成 SELECT
子句、其他高级查询或没有 R 等效项的其他语法时,才应使用此函数。对于单个函数翻译,首选 sql_expr()
。
例子
con <- simulate_dbi()
build_sql("SELECT * FROM TABLE", con = con)
#> <SQL> SELECT * FROM TABLE
x <- "TABLE"
build_sql("SELECT * FROM ", x, con = con)
#> <SQL> SELECT * FROM 'TABLE'
build_sql("SELECT * FROM ", ident(x), con = con)
#> <SQL> SELECT * FROM `TABLE`
build_sql("SELECT * FROM ", sql(x), con = con)
#> <SQL> SELECT * FROM TABLE
# http://xkcd.com/327/
name <- "Robert'); DROP TABLE Students;--"
build_sql("INSERT INTO Students (Name) VALUES (", name, ")", con = con)
#> <SQL> INSERT INTO Students (Name) VALUES ('Robert''); DROP TABLE Students;--')
相关用法
- R dbplyr backend-teradata 后端:Teradata
- R dbplyr backend-sqlite 后端:SQLite
- R dbplyr backend-odbc 后端:ODBC
- R dbplyr backend-oracle 后端:甲骨文
- R dbplyr backend-snowflake 后端:雪花
- R dbplyr backend-redshift 后端:红移
- R dbplyr backend-hana 后端:SAP HANA
- R dbplyr backend-postgres 后端:PostgreSQL
- R dbplyr backend-access 后端:MS Access
- R dbplyr backend-mysql 后端:MySQL/MariaDB
- R dbplyr escape 转义/引用字符串。
- R dbplyr expand.tbl_lazy 扩展 SQL 表以包含所有可能的值组合
- R dbplyr distinct.tbl_lazy 子集不同/唯一行
- R dbplyr pivot_wider.tbl_lazy 将数据从长轴转向宽轴
- R dbplyr mutate.tbl_lazy 创建、修改和删除列
- R dbplyr collapse.tbl_sql 计算查询的结果
- R dbplyr sql_expr 从 R 表达式生成 SQL
- R dbplyr get_returned_rows 提取并检查返回的行
- R dbplyr dbplyr_uncount “计数”数据库表
- R dbplyr count.tbl_lazy 按组计数观察值
- R dbplyr head.tbl_lazy 对第一行进行子集化
- R dbplyr db-quote SQL 转义/引用泛型
- R dbplyr copy_inline 在 dbplyr 查询中使用本地 DataFrame
- R dbplyr lahman 缓存并检索 Lahman 棒球数据库的 src_sqlite。
- R dbplyr partial_eval 部分评估表达式。
注:本文由纯净天空筛选整理自Hadley Wickham等大神的英文原创作品 Build a SQL string.。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。