我想要一个可以做到这一点的正则表达式:
VALUES('Hit 'n Run')
进入
VALUES('Hit ''n Run')
这可能吗?
答案 0 :(得分:4)
不,这不太可能。如果您有VALUES('Hit 'n Run')
,则您已经有一个无效的分隔符撇号和文字撇号的混合。字符串处理就像混合糖和盐:一旦你混合了上下文而没有适当的逃逸,就没有办法将它们拉回来。
如果您正在尝试拯救损坏的数据,可以尝试(?<!\()'(?!\))
之类的内容来匹配旁边没有括号的撇号。这是一个弱的,容易被愚弄的策略,但对于简单的数据,它可能会起作用。
如果要将动态SQL查询放在一起,则必须先将'
转义,然后将其放入查询字符串中,或者使用简单字符串替换'
和{{ 1}}如果您确定这是DBMS所需的唯一转义,或者 - 更好 - 使用适合您的DBMS的专用SQL-string-literal-escaping函数。这个功能究竟取决于您所谈论的平台(语言,DBMS)。
答案 1 :(得分:2)
然后可以利用任何可以在RegEx中表达的模式来创建您试图避免的SQL注入问题。
令人讨厌的输入:
VALUES(');DELETE * FROM customer;SELECT '