理解「WHERE _ IN _」語句
在SQLite 使用WHERE IN 語句時,必須理解的語法和用法以避免常見的錯誤。
語法問題
提供的範例程式碼會導致“程式錯誤”,因為提供的綁定(參數)數量與佔位符數量不符( ?)在聲明中。 SQLite 需要 IN 清單中的每個項目都有一個綁定參數(? 或位置參數)。
解決方案
要修正此問題,請建立足夠的綁定參數以符合變數清單。這可以使用字串插值來實現:
statement = "SELECT * FROM tab WHERE obj IN ({0})".format(', '.join(['?'] * len(list_of_vars))) c.execute(statement, list_of_vars)
避免SQL 注入
與原始程式碼片段相反,此方法可以安全地抵禦SQL 注入攻擊,因為變數正確綁定到SQL 語句。
效能注意事項
對於大型變數列表,使用臨時表可能更有效。建立一個臨時表來保存值,然後對臨時表使用 JOIN,而不是帶有綁定參數的 IN 子句。
以上是如何在SQLite中正確使用WHERE IN語句避免錯誤和SQL注入?的詳細內容。更多資訊請關注PHP中文網其他相關文章!