我正在尝试理解一个脚本来实现新的功能和选项。 为了在 sql 表中搜索,他们使用了以下语法
$sqlquery = "SELECT DISTINCT \"Name\", \"FileName\", \"Status\", lower(\"Name\") FROM \"" . $SearchedTable . "\" WHERE ";
$sqlquery=$sqlquery." (\"Name\" ~* '".$text[$i]."' OR \"DNA\" ~* '".$text[$i]."')";
- 我想知道的是他们为什么使用“名称”(我在某处读到它与 sql 注入(inject)有关)。
- 我也找不到使用这种语法 ~* 而不是 = 的原因。还是有别的意思?
最佳答案
一般说明:您当前的查询使用字符串连接,因此容易出现 SQL 注入(inject)。在您的 PHP 方面,最好的解决方法是使用准备好的语句。
也就是说,您的 SQL 语法似乎是 Postgres,而不是 MySQL。这是粗略的查询:
SELECT DISTINCT Name, FileName, Status, lower(Name)
FROM yourTable
WHERE Name ~* ? OR DNA ~* ?;
Postgres 中的 ~*
运算符不区分大小写的正则表达式匹配。因此,例如,要匹配任何以 mi
开头的 Name
,您可以使用:
WHERE Name ~* '^mi'
因此,您应该绑定(bind)到这两个占位符的是正则表达式。
关于php - 这个 ~* 语法在 sql 查询中的作用是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53746164/