2 回答

TA貢獻(xiàn)1891條經(jīng)驗(yàn) 獲得超3個(gè)贊
對(duì)于參數(shù)化查詢,您永遠(yuǎn)不需要在語(yǔ)句中使用引號(hào),它們將由 db api 添加。這應(yīng)該有效:
search = request.values.get('search')
books = db.execute("SELECT * FROM books WHERE author LIKE :search", {"search": '%' + search + '%'}).fetchall()
%符號(hào)必須是參數(shù)的一部分,以便最終:search可以用帶引號(hào)的搜索字符串替換,如此處所述。
錯(cuò)誤消息顯示如果查詢已經(jīng)包含引號(hào)會(huì)發(fā)生什么:將添加另一組引號(hào),從而中斷查詢。
但請(qǐng)注意,這也可能會(huì)出現(xiàn)此處所述的問(wèn)題:表達(dá)式中的反斜杠LIKE被視為轉(zhuǎn)義字符,可用于將傳遞的字符串中的通配符視為其文字值,但如果使用不當(dāng),可能會(huì)導(dǎo)致意外的搜索結(jié)果,或者可能導(dǎo)致錯(cuò)誤(例如,如果 like 模式以反斜杠結(jié)尾)。
如果您不打算允許用戶在搜索字符串中插入通配符,則需要對(duì)它們進(jìn)行轉(zhuǎn)義,或者考慮改用position()函數(shù):
position(:search in author) > 0
添加回答
舉報(bào)