这种〜*语法在sql查询中的功能是什么?

时间:2018-12-12 15:21:03

标签: php sql postgresql

我正在尝试理解用于实现新功能和选项的脚本。 为了搜索sql表,他们使用了以下语法

$sqlquery = "SELECT DISTINCT \"Name\", \"FileName\", \"Status\", lower(\"Name\") FROM \"" . $SearchedTable . "\" WHERE ";

$sqlquery=$sqlquery." (\"Name\" ~* '".$text[$i]."' OR \"DNA\" ~* '".$text[$i]."')";
  • 我想知道的是他们为什么使用\“ Name \”(我在某处读到它与sql注入有关)。
  • 我也找不到使用这种语法〜*而不是=的原因。还是意味着其他?

1 个答案:

答案 0 :(得分:7)

一般说明:您当前的查询使用字符串连接,因此易于进行SQL注入。在PHP方面,最好的解决方法是使用准备好的语句。

也就是说,您的SQL语法似乎是Postgres,而不是MySQL。这是粗略的查询:

SELECT DISTINCT Name, FileName, Status, lower(Name)
FROM yourTable
WHERE Name ~* ? OR DNA ~* ?;

Postgres中的~*运算符不区分大小写的正则表达式匹配。因此,例如,要匹配以Name开头的任何mi,您可以使用:

WHERE Name ~* '^mi'

因此,应该绑定到两个占位符的是正则表达式。