2

我试图在标题本身中准确解释我的问题。我可以将查询中的匹配词包围吗在mysql查询本身?MySQL查询是:

select id, FirstName,LastName,addcomments WHERE MATCH (FirstName,LastName,addcomments) AGAINST ('some sample text' WITH QUERY EXPANSION)

mysql的结果应该是这样的:

id | FirstName       | LastName             | addcomments 

1  |<b>some</b> name | lastname <b>text</b> | comments have <b>some sample text</b> inside

任何帮助将不胜感激

4

3 回答 3

3

这是一个非问题,因为 MySQL 根本不格式化结果,它将数据集传递给应用程序。然后由应用程序对这些数据做它想做的事情。

如果您使用的是 PHP,则可以str_replace在结果中使用关键字的粗体版本替换关键字

这里还有一个安全问题——如果你的数据库返回 HTML,你必须输出带有编码的内容。这意味着,如果有人设法将恶意记录注入您的数据库,您的网站可能正在服务 XSS 攻击或其他讨厌的代码

于 2011-02-12T13:45:46.713 回答
1

您可能会发现,根据输出显示的位置,这会给您带来不同的结果。例如,正确转义文本使其在命令行上显示为粗体或彩色与在 html、rtf 或 pdf 等中以粗体打印不同。

如果您使用用于显示输出的任何内容来解决问题,您将获得更可预测和可维护的结果。

于 2011-02-12T14:02:42.510 回答
1

感谢克里斯的回复。我同意 mysql 将返回任何应用程序都可以使用的通用结果。但是我可以写一个mysql函数来达到同样的效果吗?

另外,我尝试为此编写 php 函数,但它不起作用:

$searchitems=explode(" ", $trimmed);
$totalSearchItems = count($searchitems);

while ($row= mysql_fetch_array($result))
{
      for($i=0;$i<$totalSearchItems;$i++)
      {
            str_replace($searchitems[$i], '<b>'.$searchitems[$i].'</b>', $row);
      }
      //Display $row
}
于 2011-02-12T14:43:11.680 回答