php - 这个 ~* 语法在 sql 查询中的作用是什么?

标签 php sql postgresql

我正在尝试理解一个脚本来实现新的功能和选项。 为了在 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/

相关文章:

php - Mysql第1行语法错误

mysql - GROUP CONCAT 与 MESQL 中的 ORDER

python - Ansible中的任意主机名解析

php - Mysql sum 和 max 与昨天的数据组合

php - javascript 确认对话框无法正常工作

sql - 将嵌套的 sql where-in 模式转换为连接

sql - 没有分组依据的 Oracle 结果

php - 多语言翻译模块的数据库模型

sql - postgresql - 在一个查询中合并多个更新

php - 西莱克斯 2 : RegEx in routing