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

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

Gosqlite(golang)中出現(xiàn)奇怪的sqlite錯誤

Gosqlite(golang)中出現(xiàn)奇怪的sqlite錯誤

Go
手掌心 2021-04-30 17:08:27
我遇到了一個奇怪的錯誤,無法找出問題所在。我使用此功能保存?zhèn)魅氲南ⅲ篺unc (mdb *MailDB) SaveMail(mail *Mail){    conn, err := sqlite.Open("maildb.db")    if err != nil {        log.Print("Unable to open the database: ", err)        return    }    defer conn.Close()    insertsql := fmt.Sprintf(`INSERT INTO mails (sender,subject,text,time) VALUES ("%v", "%v", "%v", %v) ;`,                    mail.Sender,mail.Subject,mail.Text,time.Now().Unix())    err = conn.Exec(insertsql)    if err!=nil {        log.Print("maildb insert fail @exec: ",err)        log.Print(insertsql)        return    }}我收到此錯誤:2012/05/09 10:10:20 maildb insert fail @exec: SQL error or missing database: unrecognized token: """2012/05/09 10:10:20 INSERT INTO mails (sender,subject,text,time) VALUES ("wLrOBizTcmS1MlqeXydUK9U6YJQ=", "abc", "321", 1336551020) ;(在321之后是'\ n',我不知道為什么在這里省略了它)奇怪的是,我可以在sqlite控制臺中發(fā)送復制粘貼查詢,而不會出現(xiàn)問題。有人看到出什么問題了嗎?請幫忙!
查看完整描述

1 回答

?
米琪卡哇伊

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

我認為您的問題是"用來分隔字符串文字的,雖然這不是標準的SQL語法,并且sqlite也不支持。引用其手冊

字符串常量是通過將字符串括在單引號(')中形成的。可以通過將兩個單引號放在一行中來對字符串中的單引號進行編碼-如Pascal中那樣。不支持使用反斜杠字符進行C樣式轉(zhuǎn)義,因為它們不是標準的SQL

因此,顯然應該使用

insertsql := fmt.Sprintf(`INSERT INTO mails (sender,subject,text,time) VALUES ('%v', '%v', '%v', %v) ;`, ...)

還要注意,像您一樣構(gòu)造SQL語句是幼稚的,并且容易受到SQL注入攻擊的影響。正確的方法是首先創(chuàng)建一個準備好的語句,然后將其參數(shù)綁定到實際值,然后執(zhí)行它。我沒有使用Go綁定到sqlite的經(jīng)驗,因此我無法確定它們是否支持我引用的API,但我認為您應該嘗試對此進行調(diào)查。


查看完整回答
反對 回復 2021-05-10
  • 1 回答
  • 0 關(guān)注
  • 332 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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