相关疑难解决方法(0)

在MySQL中逃避正则表达式的用户输入的最佳方法是什么?

我想接受用户输入,表示为$ dangerous_string,并将其用作MySQL查询中RegEx的一部分.

这样做的最佳方法是什么?我想使用用户的字符串作为文字 - 如果它包含任何在MySQL RegEx中有意义的字符,那些字符实际上不应该影响我的正则表达式.

$dangerous_string = $_GET["string"];
//do something here
$dangerous_string = what_goes_here($dangerous_string);
$sql = "SELECT * FROM table WHERE search_column REGEX '" . $mysqli->real_escape_string("[[:<:]]$dangerous_string") . "'";

//etc....
Run Code Online (Sandbox Code Playgroud)

php regex mysql escaping

7
推荐指数
1
解决办法
1467
查看次数

使用 SQL REGEXP (mariadb) 过滤 Laravel 中带有特殊字符的地方

mariadb 版本 10.4

$query->where('column', 'REGEXP', '[[:<:]]'.$string.'[[:>:]]');
Run Code Online (Sandbox Code Playgroud)

此查询仅提供整个单词的搜索,并且在没有特殊字符的情况下工作正常。

例子

搜索行:
foo (bar baz)
Run Code Online (Sandbox Code Playgroud)
筛选:
$string = "(bar";
$query->where('column', 'REGEXP', '[[:<:]]'.$string.'[[:>:]]');
Run Code Online (Sandbox Code Playgroud)
错误:
SQLSTATE[42000]: Syntax error or access violation: 1139 Got error 'missing )
Run Code Online (Sandbox Code Playgroud)

现在我尝试使用addcslashespreg_quote。我成功转义(字符 withpreg_quote但过滤器不适用于该字符串,因为过滤器适用于整个单词。

任何通过整个单词更好地过滤的建议也将不胜感激。

再举一个例子

搜索行:
foo(bar baz
Run Code Online (Sandbox Code Playgroud)
筛选:
$filter = 'foo(bar';
$query->where('column', 'REGEXP', '[[:<:]]'.$string.'[[:>:]]');
Run Code Online (Sandbox Code Playgroud)

如果(将被转义,搜索将不起作用

php mariadb laravel mysql-regexp

7
推荐指数
1
解决办法
114
查看次数

标签 统计

php ×2

escaping ×1

laravel ×1

mariadb ×1

mysql ×1

mysql-regexp ×1

regex ×1