亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何通過 Golang 中的 sqlx 包將參數正確地傳遞給 SQL 請求?

如何通過 Golang 中的 sqlx 包將參數正確地傳遞給 SQL 請求?

Go
智慧大石 2022-08-24 12:49:38
在我的Golang(1.15)應用程序中,我使用sqlx包來處理PostgreSQL數據庫(PostgreSQL 12.5)。當我嘗試使用參數PostgreSQL數據庫執行SQL語句時,它會引發錯誤:錯誤:無法確定參數 $1 的數據類型 (SQLSTATE 42P18): Pg錯誤空根據官方文檔,此錯誤意味著通過了。INDETERMINATE DATATYPE具有值。它不是空/無或空的。此外,其數據類型是 簡單的內置數據類型 。organizationId*string具有查詢方法的代碼段:rows, err := cr.db.Query(`    select        channels.channel_id::text,        channels.channel_name::text    from        channels    left join organizations on        channels.organization_id = organizations.organization_id    where        organizations.tree_organization_id like concat( '%', '\', $1, '%' );`, *organizationId)if err != nil {    fmt.Println(err)}我也嘗試使用,但它也會引起錯誤:NamedQuery錯誤:在“:”處或附近出現語法錯誤 (SQLSTATE 42601): PgError null使用 NamedQuery 方法的代碼段:args := map[string]interface{}{"organization_id": *organizationId}rows, err := cr.db.NamedQuery(`    select        channels.channel_id::text,        channels.channel_name::text    from        channels    left join organizations on        channels.organization_id = organizations.organization_id    where        organizations.tree_organization_id like concat( '%', '\', :organization_id, '%' );`, args)if err != nil {    fmt.Println(err)}很有可能,參數沒有正確地傳遞給我的請求。有人可以解釋如何解決這種奇怪的行為嗎?附言我必須馬上說,我不想通過 或通過該方法形成sql查詢。這并不安全。concatenationfmt.Sprintf
查看完整描述

1 回答

?
寶慕林4294392

TA貢獻2021條經驗 獲得超8個贊

好吧,我找到了這個問題的解決方案。

我在sqlx包的github存儲庫中找到了討論。

在第一個選項中,我們可以在查詢外部對搜索字符串進行串聯。這應該仍然安全免受注射攻擊。

嘗試此操作的第二個選擇: .正如Bjarni Ragnarsson在評論中所說,PostgreSQL無法推斷出.concat( '%', '\', $1::text, '%' )$1


查看完整回答
反對 回復 2022-08-24
  • 1 回答
  • 0 關注
  • 129 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號