我正在尝试为我的网站创建一个搜索引擎,用户可以在其中输入关键字,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
非常感谢您的帮助!
答案 0 :(得分:2)
你正在构建一个不正确的查询字符串,这就像
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