這是一個方便的函數,可以通過自動轉義輸入中的所有表達式來防止 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.。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。