0

我有一个包含大约 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 image main_title author1 call_no item_type publdate publplace publshr item_home item_status subj1 subj2

4

2 回答 2

0

更新 :

尝试更改此行:

@$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。如果您的主题、标题和作者字段具有适当的全文索引,您可以使用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 如果您可以选择 DB,我建议您使用对不同类型的文本搜索有更多支持的东西。我真正熟悉的唯一关系数据库是 PostgreSQL 和 MySQL,而 PostgreSQL 对文本搜索有更好的支持。

于 2013-08-05T12:20:50.617 回答
0

试试喜欢

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

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

于 2013-08-05T11:44:17.497 回答