我尝试为我的数据库创建高级搜索。 我想做这样的事情:如果用户输入搜索=
overf**w
我的数据库中有一个列,他的价值 = overflow
- 向他展示。
这是我的代码:
$name = str_replace('*', '_', $name);
SELECT name FROM table WHERE name LIKE CONCAT('%', ?, '%')
它不起作用,我不知道问题出在哪里。
在这种情况下不能使用 LIKE,需要使用 REGEXP() 进行通配符搜索。将 * 或 ** 替换为
.*
。要仅返回以给定值开头的名称,请在正则表达式的开头使用 ^
SELECT name
FROM actors
WHERE name REGEXP('^overf.*w')
我不懂 php,但你的 $name 参数应该像这样设置(以伪代码)
$name = '^' + replace($name, '**', '.*')