我想从 html 表单中获取用户输入,并通过将列与用户输入匹配来执行 SELECT,并且可以安全地注入。但我希望用户输入是逗号分隔的列表。例如,如果该列名为“name”并且 user_input 是“Alice,Bob,Carrol”,我想执行查询
SELECT FROM table WHERE name IN ("Alice","Bob","Carrol");
这意味着我有与这个问题相同的问题使用python sqlite3 - DB-API 2.0从sqlite表中选择其中rowid在列表中。 但我当然不想自己进行字符串连接以避免注入。同时,因为 user_input 中可能有任意数量的逗号,所以我不能这样做:
db.execute('SELECT FROM table WHERE name IN (?,?,?)', user_input_splited)
db.execute('SELECT FROM table WHERE name IN ?', user_input_sanitized)
split()
用逗号输入,然后迭代该列表。当您接受每个值时,将其推入one 数组,并将文字
"?"
推入另一个。当然,现在验证您是否至少有一个可接受的值。
现在,通过包含
join(", ", $qmarks_array)
来构建 SQL 语句,以自动构建一个看起来像
?, ?, ? ...
并带有适当数量问号的字符串。(如果只有一个元素,则不会插入任何逗号) .) 然后,以这种方式构建 SQL 语句后,提供另一个数组作为执行该查询的函数的输入。 通过这种方式,您可以将每个值作为参数提供,您应该始终这样做,
并且您允许参数的数量发生变化。
list1=[1,2,3,4,5]
question_marks=len(list1)*'?,'
selecting="select * from products where product_id in ("+question_marks[:-1]+")"
curr.execute(selecting,list1)
product_list=curr.fetchall()