第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

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

mysql_real_escape_string 等效于 Golang

mysql_real_escape_string 等效于 Golang

Go
慕斯709654 2021-10-25 17:01:14
我想轉(zhuǎn)義構(gòu)成數(shù)據(jù)庫查詢一部分的值,但我不能使用參數(shù)化查詢。Go 是否具有mysql_real_escape_string可用于轉(zhuǎn)義查詢值的 PHP 等價物?
查看完整描述

3 回答

?
米脂

TA貢獻1836條經(jīng)驗 獲得超3個贊

我想出了自己的解決方案來自己創(chuàng)建函數(shù)。

希望它對某人有用。


func MysqlRealEscapeString(value string) string {

    replace := map[string]string{"\\":"\\\\", "'":`\'`, "\\0":"\\\\0", "\n":"\\n", "\r":"\\r", `"`:`\"`, "\x1a":"\\Z"}


    for b, a := range replace {

        value = strings.Replace(value, b, a, -1)

    }

    

    return value;

}

1.MysqlRealEscapeString 不對,下面的測試用例會失敗


func TestEscape(t *testing.T) {

    mysqlEscapeList := map[string]string{

        "\\": "\\\\", "'": `\'`, "\\0": "\\\\0", "\n": "\\n", "\r": "\\r", `"`: `\"`, "\x1a": "\\Z"}


    for old, want := range mysqlEscapeList {

        testEscape(t, old, want)

    }

    testEscape(t, `<p>123</p><div><img width="1080" />`, `<p>123</p><div><img width=\"1080\" />`)

}

func testEscape(t *testing.T, origin, want string) {

    escaped := MysqlRealEscapeString(origin)

    assert.Equal(t, want, escaped)

}

改用這個

func Escape(sql string) string {

    dest := make([]byte, 0, 2*len(sql))

    var escape byte

    for i := 0; i < len(sql); i++ {

        c := sql[i]


        escape = 0


        switch c {

        case 0: /* Must be escaped for 'mysql' */

            escape = '0'

            break

        case '\n': /* Must be escaped for logs */

            escape = 'n'

            break

        case '\r':

            escape = 'r'

            break

        case '\\':

            escape = '\\'

            break

        case '\'':

            escape = '\''

            break

        case '"': /* Better safe than sorry */

            escape = '"'

            break

        case '\032': //十進制26,八進制32,十六進制1a, /* This gives problems on Win32 */

            escape = 'Z'

        }


        if escape != 0 {

            dest = append(dest, '\\', escape)

        } else {

            dest = append(dest, c)

        }

    }


    return string(dest)

}


查看完整回答
反對 回復(fù) 2021-10-25
?
桃花長相依

TA貢獻1860條經(jīng)驗 獲得超8個贊

改進的答案:


func MysqlRealEscapeString(value string) string {

    var sb strings.Builder

    for i := 0; i < len(value); i++ {

        c := value[i]

        switch c {

        case '\\', 0, '\n', '\r', '\'', '"':

            sb.WriteByte('\\')

            sb.WriteByte(c)

        case '\032':

            sb.WriteByte('\\')

            sb.WriteByte('Z')

        default:

            sb.WriteByte(c)

        }

    }

    return sb.String()

}


查看完整回答
反對 回復(fù) 2021-10-25
  • 3 回答
  • 0 關(guān)注
  • 198 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號