[英]Dynamic SQL query WHERE clause using pyodbc best practice
我正在尝试生成一个 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”的第一个示例名称搜索查询?
你可以这样做
if($x){ $value[] = $x}
if($y{ $value[] = $y}
$sql = "SELECT * FROM mytable WHERE colx = ? AND coly = ?";
$stmt ->pdo->prepare($sql);
$stmt->execute($value);
当您说应该使用绑定参数来防止 SQL 注入时,您是正确的。 如果需要,您可以在 for 循环中简单地构建 SQL:
firstNameSql = []
for name in firstNames:
firstNameSql.append('FirstName like '%?%')
sql = "SELECT FirstName, LastName FROM Names WHERE (" + firstNameSql.join(' OR ') + ")"
虽然,我建议您研究一个功能更全的 ORM,它为您提供了一个查询生成器。 看看这个问题的想法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.