理解“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中文网其他相关文章!