我知道 sql 语句中参数的使用,但出于好奇,使用 Format 函数来防止 sql 注入而不是使用参数是安全的。
像这个样本
sCustomer : string
begin
AdoSql.CommandText:=Format('Select SUM(value) result from invoices where customer=%s',[QuotedStr(sCustomer)]);
end;
那会probably防止 SQL 注入,假设QuotedStr
按预期工作,并且没有任何边缘情况可以破坏它。 (这绝不是保证。正如 Linas 在评论中指出的那样,MySql 允许您使用\'
逃避引号。其他 DBMS 可能具有类似的功能。具有足够系统理论知识的攻击者将能够利用它们。)
然而,即使 QuotedStr 足够好,出于不同的原因使用参数仍然更好:性能。当您将参数与查询分开时,您最终可能会使用不同的参数多次发送完全相同的查询代码。如果这样做,数据库可以缓存在计算查询时所做的大量工作,因此您的数据库访问速度会更快。当您将参数混合到查询代码本身中时,这不起作用(或至少不起作用)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)