具有以下内容:
array = ['', 'kujawski=', "'", "select * from symbols where name = '='", ';drop table;', 'fakeone=']
我可以生成以下查询:
//(query, array)
('select count(*) from symbols where name in (?,?,?,?,?,?)', ('', 'kujawski=', "'", "select * from symbols where name = '='", ';drop table;', 'fakeone='))
生成查询,我可以将其放入cursor.execute((函数中,目前我正在通过以下代码来完成:
"select count(*) from table where name in (%s)" % ",".join("?"*len(array)),array
而cursor.execute((函数返回所需的输出。然而,问题是当我想用AND过滤查询时,例如:
select count(*) from table where name in (...) and column5 in (...)
我不知道如何在python中生成查询,哪个cursor.execute((函数会接受它,请帮助-谢谢!
我不确定您要用带有联接的第二个select
语句实现什么。第一行是应该传递给cur.execute()
的内容。例如:
`cur.execute(
'select count(*) from symbols where name in (?,?,?,?,?,?)',
('', 'kujawski=', "'", "select * from symbols where name = '='", ';drop table symbols;', 'fakeone=')
)`
这也将防止SQL注入攻击,而这正是您自己试图利用的。
如果您想执行drop
语句等,那么您应该使用cur.execute()
来单独处理它,而不是像您尝试的那样作为另一个命令中的嵌入命令。
事实上,我完全不知道你想用这个来实现什么。这是sqlite完成后的声明(大致(。
select
count(*)
from
symbols
where
name in (
'',
'kujawski=',
"'",
"select * from symbols where name = '='",
';drop table symbols;',
'fakeone=')