使用mysql的书籍数据库的php搜索脚本

时间:2013-08-05 11:42:39

标签: php mysql search

我有一个约3000本书的数据库,我希望能够通过标题,主题或作者在我的数据库中搜索书籍。我已尽力使用php和mysql编写脚本但我仍然没有做对。请有人帮忙。下面是我带来脚本的程度..以及我的mysql数据库中表格的一个例子

<?php

if (@$find == "")




// Otherwise we connect to our Database

mysql_connect("localhost", "root", "erhun") or die(mysql_error());


mysql_select_db("books") or die(mysql_error());


// We perform a bit of filtering
@$find = strtoupper($find);
@$find = strip_tags($find);
@$find = trim ($find);

@$search = strip_tags(stripslashes(mysql_real_escape_string(@$db, @$_POST["search"])));

//query the database
@$query = ("SELECT * FROM `project` WHERE (`author1` LIKE '%$search%' OR `main_title`               `LIKE '%$search%' OR `subj1` LIKE '%$search%')");  


//displaying the data
@$results=mysql_query(@$query) or die(mysql_error ());

if(mysql_num_rows(@$results) >= 1)

//here the table starts
echo "<table id='results'>";
while($row=mysql_fetch_array($results))


{
echo "<tr><td><img src='image1/".$row['image']."' height='100px' width='90px'></td><td   valign='top'>
<b><a href='details.php?id=".$row['book_id']."'>".$row['main_title']."<br/>
By: ".$row['author1']."</a></b><br/>
<b>Call no:</b> ".$row['call_no']."<br/>
<b>Type:</b> ".$row['item_type']."<br/>
<b>Year:</b> ".$row['publdate']."</td></tr>";
}
echo "</table>";

?>

我的表包含这些不同的字段

全文
book_id 图片 主题 作者1 call_no 物品种类 publdate publplace publshr item_home ITEM_STATUS subj1 subj2

2 个答案:

答案 0 :(得分:0)

尝试

@$query = "SELECT * FROM `project` WHERE (`author1` LIKE '%$search%' OR `main_title` LIKE '%$search%' OR `subj1` LIKE '%$search%')"; 

在“main_title”之后你有一个额外的引用`

答案 1 :(得分:0)

更新:

尝试更改此行:

@$search = strip_tags(stripslashes(mysql_real_escape_string($db, @$_POST["search"])));

到:

@$search = strip_tags(stripslashes(mysql_real_escape_string( @$_POST["search"])));

我唯一需要改变的是删除$ db变量,只是传入搜索字符串,它似乎工作正常。可能因为某些其他原因需要$ db,所以我建议回到你从中获得的文档并进一步调查。

P.S。我仍然建议使用MATCH AGAINST。如果您的主题,标题和作者字段具有适当的FULLTEXT索引,则可以使用MATCH AGAINST,例如:

@$query = "SELECT * FROM `project` WHERE MATCH (subj1, main_title, author) AGAINST ('$search' IN NATURAL LANGUAGE MODE)";

此查询要求您在所有三列上都有全文索引:

ALTER TABLE project ADD FULLTEXT(subj1, main_title, author);

索引中的列列表必须与您希望在查询中匹配的列的列表匹配,以便进行优化我相信。如果您希望能够单独匹配各个列,则必须创建其他索引。该查询也适用于我的测试页面,它应该通过一些实验更好地支持普通的搜索查询。

P.P.S。如果您可以选择DB,我建议您使用更多支持不同类型文本搜索的内容。我真正熟悉的唯一关系数据库是PostgreSQL和MySQL,PostgreSQL有一个很多更好的文本搜索支持。