在我的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
- 1 回答
- 0 關注
- 129 瀏覽
添加回答
舉報
0/150
提交
取消