我试图使用MATCH SQL命令与服务器端数据表脚本,但不知何故,数据表无法工作,它没有找到任何结果,但如果我复制并粘贴查询输出到任何SQL客户端,它工作正常,并找到预期的结果(匹配)。
为了让你了解情况,这是我现在所做的:
1-在包含将用于搜索的列的数据库上创建FULLTEXT索引:
ALTER TABLE site ADD FULLTEXT INDEX全文索引站点(ID,标题,域);
2-已更改服务器端脚本中搜索字符串的逻辑:
$searchValue = mysqli_real_escape_string($mysqli,$_POST['search']['value']); // Search value
## Search
$searchQuery = " ";
if($searchValue != ''){
$searchQuery = " AND MATCH(id, title, domain) AGAINST('".$searchValue."' IN BOOLEAN MODE)";
}
3-我已将查询更改为使用MATCH命令:
select id, title, domain
from site
where 1 ".$searchQuery."
4-但是如果我在客户端搜索某个东西,却找不到任何结果......我还检查了有效负载,search[value]包含要搜索的值,但没有返回任何结果,甚至我还放了一个echo并得到了输出:
select id, title, domain
from site
where 1 AND MATCH(id, title, domain) AGAINST('test' IN BOOLEAN MODE);
并且在SQL客户端上运行良好,它返回与“测试”模式匹配的所有行,但在数据表上只说“找不到结果”。
5-我甚至尝试过使用LIKE OR方法,但效果不太好,因为模式在搜索的每一列上都必须是巧合。
例如:
## Search
$searchQuery = " ";
if($searchValue != ''){
$searchQuery = " AND (id LIKE '%".$searchValue."%' OR title LIKE '%".$searchValue."%' OR domain LIKE '%".$searchValue."%')";
}
我对此感到有点疲惫,也不知道为什么不对服务器端脚本起作用,而是对sql客户端起作用。
任何帮助都将不胜感激。
1条答案
按热度按时间jchrr9hc1#
我发现了这个问题!我得到了一个重复的
$row = $result->fetch_assoc()
之前的while ($row = $result->fetch())
是粉碎行!谢谢。