我需要Regex进行SQL搜索,例如:
"SELECT * FROM `words` WHERE `searchWord` REGEXP '$queryWord(\d{1,4})';"
除了我需要在'='
和$queryWord
部分之间添加(\d{1,4})
,不太确定如何执行此操作?
答案 0 :(得分:3)
你只需要逃避'='。这应该有效:
"SELECT * FROM `words` WHERE `searchWord` REGEXP '$queryWord\=\d{1,4}'";
另请注意,您的号码周围缺少捕获组。我们正在检查它们,而不是将它们归还。
答案 1 :(得分:3)
我似乎无法让\d
表现出来,所以我使用了POSIX [:digit:]
。试试这个:
SELECT * FROM `words` WHERE searchWord REGEXP '$queryWord=[[:digit:]]{1,4}'
等号不需要特殊处理。在我的测试中,它可以使用和不使用转发。
你也可以这样做:
SELECT * FROM `words` WHERE searchWord REGEXP '$queryWord=[0-9]{1,4}'
最后,请注意在查询中插入字符串值。这可能使您容易受到SQL注入攻击。有关详细信息,请参阅here和许多其他地方。
答案 2 :(得分:1)
$query="SELECT * FROM `words` WHERE `searchWord` REGEXP '".$queryWord."\=\d{1,4}';"
这样可行。
你需要小心,并确保你的$ queryWord只有字母,没有像点等特殊字符。