在 Go 中,如何安全轉(zhuǎn)義 MySQL Like 查詢中的特殊字符?

在 Go 中,如何安全轉(zhuǎn)義 MySQL Like 查詢中的特殊字符?

在 go 中進(jìn)行 mysql like % 模糊查詢的轉(zhuǎn)義

mysql 中進(jìn)行模糊查詢時,如果查詢內(nèi)容包含百分號 (%),則需要對 % 進(jìn)行轉(zhuǎn)義,否則將匹配所有行。本文將介紹如何在 go 中方便地對模糊查詢內(nèi)容進(jìn)行轉(zhuǎn)義。

go 標(biāo)準(zhǔn)庫中提供了 strings.builder 類型,它允許將字符串連接成一個新的字符串。可以使用此類型來手動轉(zhuǎn)義查詢內(nèi)容中的特殊字符。

以下是一個函數(shù) escapelike,它接受三個參數(shù):

  • left: 用于連接查詢內(nèi)容左側(cè)的字符(例如左單引號)
  • right: 用于連接查詢內(nèi)容右側(cè)的字符(例如右單引號)
  • word: 要轉(zhuǎn)義的查詢內(nèi)容

該函數(shù)將遍歷查詢內(nèi)容,檢查是否存在需要轉(zhuǎn)義的字符(%,_,)。如果找到這樣的字符,它將在字符前面添加反斜杠。

以下代碼示例演示了如何使用 escapelike 函數(shù):

import (     "strings" )  func escapelike(left, right, word string) string {     var n int     for i := range word {         if c := word[i]; c == '%' || c == '_' || c == '' {             n++         }     }     // no characters to escape.     if n == 0 {         return left + word + right     }     var b strings.builder     b.grow(len(word) + n)     for _, c := range word {         if c == '%' || c == '_' || c == '' {             b.writebyte('')         }         b.writerune(c)     }     return left + b.string() + right }

調(diào)用 escapelike 函數(shù)時,可以傳入左單引號和右單引號作為 left 和 right 參數(shù)。

需要注意的是,除了 %,_, 之外,mysql 中需要被轉(zhuǎn)義的字符還有:

[ ] ( ) { } | ^  / $

可以在 mysql 官方文檔中找到有關(guān)模糊查詢的更多信息。

? 版權(quán)聲明
THE END
喜歡就支持一下吧
點贊15 分享