我正在尝试生成类似的SQL查询
SELECT FirstName,
LastName
FROM Names
WHERE (FirstName LIKE '%FNameA%' OR FirstName LIKE '%FNameB%' ....OR FirstName LIKE '%FNameN%')
AND (LastName LIKE '%LNameA%'OR LastName LIKE '%LNameB%'..... OR LastName LIKE '%LNameN%')
在python中动态地运行,并使用pyodbc在Microsoft SQL服务器上运行。我只是想知道最佳实践是什么避免此处的SQL注入漏洞。
例如,对于具有已知输入数量的查询,我可以使用绑定参数将任何输入转义到查询中
"SELECT * FROM mytable WHERE colx = ? AND coly = ?", (x, y).
有没有一种方法可以使用参数来构造具有任意数量的“ Fnames”和“ LNames”的第一个示例名称搜索查询?
答案 0 :(得分:0)
您可以做到
if($x){ $value[] = $x}
if($y{ $value[] = $y}
$sql = "SELECT * FROM mytable WHERE colx = ? AND coly = ?";
$stmt ->pdo->prepare($sql);
$stmt->execute($value);
答案 1 :(得分:0)
当您说应该使用绑定参数来防止SQL注入时,您是正确的。您可以根据需要在for循环中简单地构建SQL:
firstNameSql = []
for name in firstNames:
firstNameSql.append('FirstName like '%?%')
sql = "SELECT FirstName, LastName FROM Names WHERE (" + firstNameSql.join(' OR ') + ")"
尽管如此,我还是建议您研究功能更全的ORM,该ORM为您提供查询构建器。看看this question的想法。