'
)存储在数据库的字符字段中,而是始终将撇号转换为某些唯一的替代符号,该符号不会被识别为SQL语法,并且不可能是 - 在您的数据中找到或有意义。SELECT Name FROM Client WHERE TYPE = '1';
。这应该强制所有非撇号字符被视为文字值本身的一部分,无论它们是后引号,花括号,分号,反斜线,正斜线等等。所以像{{1不会以不同的方式解释。(注意:我们正在使用SQL Server,它不会将反引号符号识别为有效的SQL标点符号,但如果使用MySQL,我们还需要翻译后引号。)
我已经用可以阻止SQL的每个可以想象的符号对此进行了测试,到目前为止它已经经受住了一切。我忽略了什么吗?我想在生产系统上尝试之前得到一些社区反馈。
我们的环境:
答案 0 :(得分:1)
我不了解MySQL方面的事情,但由于这主要是关于SQL Server,我可以说这种方法不会让你获得任何参数化查询和/或使用存储过程不会产生任何问题的方法。已经得到你了但是,它确实有以下缺点:
SELECT Name FROM Cient WHERE TYPE = '1';
,如果TYPE
字段是数字类型,那么您最多会损害性能,最糟糕的是会出现转换错误只需使用参数,无论是作为存储过程的输入,还是参数化的即席SQL语句。如果使用.NET,则在两种情况下都使用SqlParameter
。
ADOdb 支持参数化查询和存储过程(本质上参数化)。请参阅:
他们甚至提到PDO(转到这里及其下一小节:http://phplens.com/lens/adodb/docs-adodb.htm#connect_ex),但我不确定这是否有用或无用。这里还提到了PDO:http://adodb.sourceforge.net/docs-adodb.htm#php5。