[英]php search script for a book database using mysql
我有大约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图片main_title author1 call_no item_type publdate publplace publshr item_home item_status subj1 subj2
尝试像
@$query = "SELECT * FROM `project` WHERE (`author1` LIKE '%$search%' OR `main_title` LIKE '%$search%' OR `subj1` LIKE '%$search%')";
您在“ main_title”之后加了一个引号`
更新 :
尝试更改此行:
@$search = strip_tags(stripslashes(mysql_real_escape_string($db, @$_POST["search"])));
至 :
@$search = strip_tags(stripslashes(mysql_real_escape_string( @$_POST["search"])));
我唯一需要更改的就是删除$ db变量,只是传入搜索字符串,它似乎可以正常工作。 可能由于其他一些原因而需要$ db,因此我建议返回您从中获得的文档并进行进一步调查。
PS我仍然建议使用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);
为了优化,我相信索引中的列列表必须与您要在查询中匹配的列列表匹配。 如果要能够分别与各个列进行匹配,则必须创建其他索引。 该查询也可以在我的测试页上使用,并且应该通过一些实验更好地支持常规搜索查询。
PPS如果您选择数据库,我建议您使用对不同类型的文本搜索有更多支持的工具。 只有关系数据库,我真正熟悉是PostgreSQL和MySQL和PostgreSQL拥有文本搜索了很多更好的支持。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.