我的数据库中有用用户输入搜索的记录,最初,这足以找到正确的记录.
"SELECT id FROM plants WHERE Flower LIKE '%" . $sanitizedUserInput . "%'"
Run Code Online (Sandbox Code Playgroud)
这一切都运作得很好,但事情开始发生的情况就像搜索"红色"在他们的Flower领域中按顺序获得字符"红色"的植物,而不仅仅是整个单词"红色".
我被建议只是在用户输入的任一侧放置一个空格,但我知道这将是字段是字段中的第一个字或最后一个字时会失败.我心想,我应该用正则表达式!搜索任何一侧有单词边界的单词.
不幸的是,我以前从未在数据库中使用正则表达式.如何构建查询以使用正则表达式搜索数据库?希望它像这样简单:
"SELECT id FROM plants WHERE Flower REGEX `/\b" . $sanitizedUserInput . " \b/`"
Run Code Online (Sandbox Code Playgroud)
是的,它非常简单.
MySQL正则表达式中的单词边界序列是[[:<:]],[[:>:]]所以你最终会得到类似的东西:
$query = "SELECT id ".
"FROM plants ".
"WHERE Flower REGEXP '[[:<:]]".$sanitizedUserInput."[[:>:]]'";
Run Code Online (Sandbox Code Playgroud)