我正在尝试为我的网站创建一个搜索引擎,用户可以在其中输入关键字,PHP 脚本将搜索我的fyp_items表的"名称"和"描述"列。到目前为止,我已经设法将输入分解为一个单词数组,并尝试在我的数据库上执行 SELECT 查询。
问题是,即使关键字与表中数据的关键字匹配,它也无法找到项目。下面是我的脚本...我希望有人能帮助我。
if(empty($_POST)=== false){
$output = '';
$error = '';
$input = $_POST['search_input'];
$i=0;
if($input){
$keyword = explode(" ", $input);
require ('core/dbconnection.php');
//If a user is logged in check if the user is Admin or Customer.
if(isset($_SESSION['userid'])){
if($admin == 1){
}
}else{
//If user is not logged in search items table only.
$search_items = "SELECT * FROM fyp_items WHERE ";
foreach($keyword as $k){
$k = mysql_real_escape_string($k);
$i++;
if($i == 1){
$search_items .= "name LIKE '$k' OR description LIKE '$k'";
}else
$search_items .= " OR name LIKE '$k' OR description LIKE '$k'";
}
$item_qry = mysql_query("$search_items")or die(mysql_error());
$numrows = mysql_num_rows($item_qry);
if($numrows > 0){
$output = 'found it';
}else
$error = '<p class="pageerror">Sorry, what you were looking for was not found.</p>';
}
}else
$error = '<p class="pageerror">Please enter your search terms.</p>';
我已经通过回显输出来测试帖子,并且我还回显了$search_items
变量来获得这个......http://awesomescreenshot.com/05c2fwytac
您的帮助将不胜感激!
您正在构建一个不正确的查询字符串,如下所示
SELECT ... WHERE name LIKE 'foo' OR description LIKE 'foo'
没有威尔卡的LIKE
比较是没有意义的。你在功能上得到了相当于
SELECT ... WHERE name='foo' OR description='foo'
通配符允许在字段中匹配子字符串:
SELECT ... WHERE name='%foo%' OR description = '%foo%'
因此,单词foo
可以出现在字段中的任何地方并匹配。现在,只有当foo
是任一字段中的唯一内容时,您的查询才会匹配。
而且这类查询效率非常低,尤其是在搜索词数量攀升的情况下。您应该起诉fulltext
搜索:https://dev.mysql.com/doc/refman/5.0/en/fulltext-search.html