php – PDO – 搜索是整体查询术语而不是单独查询每个术语
发布时间:2020-12-13 22:45:05 所属栏目:PHP教程 来源:网络整理
导读:我目前有一个简单的搜索引擎,它根据用户的输入搜索我的数据库中的列: $search = $_GET['search'];$terms = explode(" ",$search); $sql = "SELECT * FROM people WHERE lname LIKE :search"; $q = $conn-prepare($sql) or die("failed!"); $q-bindValue(':s
我目前有一个简单的搜索引擎,它根据用户的输入搜索我的数据库中的列:
$search = $_GET['search']; $terms = explode(" ",$search); $sql = "SELECT * FROM people WHERE lname LIKE :search"; $q = $conn->prepare($sql) or die("failed!"); $q->bindValue(':search',"%".$search."%",PDO::PARAM_STR); $q->execute(); if ($q){ // do something } 目前它正在搜索整个术语,例如“红色桌面”返回结果但“桌面红色”不返回任何内容 有任何想法吗?任何帮助非常感谢! 编辑: 我已经改变了这个…… $search = $_GET['search']; $terms = explode(" ",$search); $sql = "SELECT * FROM people WHERE MATCH (lname,fname) AGAINST (:search IN BOOLEAN MODE)"; $q = $conn->prepare($sql) or die("failed!"); $q->bindValue(':search',PDO::PARAM_STR); $q->execute(); 它现在似乎工作正常,如果有人能提出更好的解决方案我会非常感激! 解决方法
这可能不是最好的方法,但我认为这样的事情可能会起作用.我本想知道是否有更聪明的方法来做到这一点!
$search = $_GET['search']; $terms = explode(" ",$search); $sql = "SELECT * FROM people" if(count($terms) > 0) { $sql .= " WHERE (lname LIKE '%:term_0%' OR fname LIKE '%:term_0%')"; for($i = 1; $i < count($terms); $i++) $sql .= " AND (lname LIKE '%:term_" . $i . "%' OR fname LIKE '%:term_" . $i . "%')"; } $q = $conn->prepare($sql) or die("failed!"); for($i = 0; $i < count($terms); $i++) $q->bindValue(':term_' . $i,$terms[$i]); $q->execute(); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |