全文索引查询无效

时间:2014-02-21 07:33:54

标签: php mysql

全文索引已经在产品表上设置,但是下面使用的查询没有显示结果,它给出了错误

  

提供的参数不是有效的MySQL结果资源。

要添加,如果我直接在数据库上使用相同的查询,它会给我正确的结果。

$kws = $_POST['kw'];
$kws = mysql_real_escape_string($kws);
$query = "SELECT * FROM products WHERE MATCH (product_name,brand,short_desc) AGAINST (".$kws.") limit 14" ;
$res_old = mysql_query($query);
$count = mysql_num_rows($res_old);
$i = 0;

if($count > 0)
{
echo "<ul style='list-style-type: none;'>";
echo "<li align='right' style='margin-right:20px;'><div style='border-bottom:1px solid #A5ACB2;'>Searching for $kws&nbsp&nbsp|<a href='search.php?search=$kws'>&nbsp&nbspSee All</a></div></li>";
while($row = mysql_fetch_array($res_old))
{
  echo "<li style='border-bottom: 1px solid #A5ACB2; padding:5px; margin-left:-40px;margin-right:5px;'>";
  }
And so on..

知道为什么会这样吗?代码从这里继续&amp;如果我像这样使用简单的mysql查询

,它的工作完全正常
select * from products where product_name like '%".$kws."%' or brand like '%".$kws."%' or short_desc like '%".$kws."%' limit 14

任何人都可以提供帮助吗?

修改的 $ kws来自不同的php文件,特别是来自文本框。这是标题&amp;中的搜索框。 ajax用于livesearch。此代码来自livesearch.php文件。

2 个答案:

答案 0 :(得分:1)

由于在ft_min_word_len

上指定了字长,因此可能无效

http://dev.mysql.com/doc/refman/5.1/en/fulltext-fine-tuning.html

所以在debian中通常是/etc/mysql/my.cnf

您需要在那里设置最小长度。

确保重置字长后重新启动mysql。此外,您可能需要删除索引并重建或修复表。

更多信息可以通过不同方式在全文搜索中使用通配符。检查以下内容可能会对您有所帮助。

http://forums.mysql.com/read.php?107,113504,113504

答案 1 :(得分:-1)

没有证据表明您发布了任何实际连接到数据库的任何代码(mysql_connect()调用)。没有它,我只能假设你没有连接到数据库。如果您没有连接,则无法执行查询。

但是我不会告诉你如何解决这个问题,因为你在代码中使用了弃用的mysql_ *函数。您需要切换到mysqli或PDO。有很多关于如何使用这些库的教程。