1 回答

TA貢獻1848條經驗 獲得超2個贊
占位符的替換是由postgres服務器完成的,不應該是Go代碼或松鼠的工作來做替換。
在執行采用參數的查詢時,數據庫驅動程序必須執行的操作的大致概述如下所示:
使用查詢字符串(占位符保持不變),將向 postgres 服務器發送請求以創建預準備語句。
parse
使用參數值和新創建的語句的標識符,發送一個請求,通過創建門戶使語句準備好執行。門戶(類似于游標,但不相同)表示準備執行或已部分執行的語句,并填充任何缺少的參數值。
bind
使用門戶的標識符將請求發送到服務器,然后服務器執行門戶的查詢。
execute
請注意,上述步驟只是一個粗略的概述,實際上數據庫客戶端和服務器之間涉及更多的請求 - 響應周期。
就目前而言,我相信它向您顯示的是請求創建的準備好的聲明,盡管由于我不熟悉它,因此我無法確定。pgAdmin
parse
從理論上講,像 這樣的幫助程序庫或類似的驅動程序庫可以實現參數本身的替換,然后向服務器發送一個簡單的查詢。但是,一般來說,考慮到SQL注入的可能性,在我看來,最好將其留給postgres服務器的權威。squirrel
pgx
的工作是簡單地將占位符轉換為指定的格式。例如,您可以使用MySQL格式編寫SQL,然后調用該方法將其轉換為PostgreSQL格式。PlaceholderFormat
(?,?,...)
PlaceholderFormat(sql.Dollar)
($1,$2,...)
- 1 回答
- 0 關注
- 124 瀏覽
添加回答
舉報