如何进行良好的SQL搜索?

时间:2011-02-05 02:32:31

标签: php sql mysql search

我有一个搜索字段,并且使用该单个文本框我希望用户能够按名称查找图库和图像。我遇到的问题是我似乎无法在查询中获得任何结果,即使语法很好而且没有错误。

以下是该场景:我的群组名称为“Liten gruppe!”,搜索字符串为“liten”。对于非区分大小写的搜索,搜索字符串和结果字符串都会切换为小写。

语法中的某些东西必须做一些我不期望的事情。

SELECT `id`
FROM gallery_groups
WHERE   `name` LIKE LOWER('%$searchstring%') OR
        `date_created` LIKE LOWER('%$searchstring%');

感谢您的帮助


编辑:好的,这是一个愚蠢的错误。但是修正仍然没有结果:

SELECT `id`
FROM gallery_groups
WHERE   LOWER(`name`) LIKE '%$searchstring%' OR
        LOWER(`date_created`) LIKE '%$searchstring%';

编辑:有意思!将生成的查询直接复制到PhpMyAdmin会导致匹配。但是,从PHP调用时不会产生任何行。怎么会这样?


编辑:好的,事实证明查询确实返回了1个结果。我被结果的转储输出所迷惑:

object(mysqli_result)[3]
  public 'current_field' => null
  public 'field_count' => null
  public 'lengths' => null
  public 'num_rows' => null
  public 'type' => null

如果结果中的所有字段都为null,除了运行fetch_object()之外,我怎么可能知道是否有任何结果?

3 个答案:

答案 0 :(得分:1)

您可以在没有LOWER的情况下在MYSQL中发出不区分大小写的搜索:

WHERE   `name` COLLATE UTF8_GENERAL_CI LIKE '%$searchstring%' OR
        `date_created` COLLATE UTF8_GENERAL_CI LIKE '%$searchstring%';

用于调试的AS:尝试打印SQL查询,因为它们被传递到数据库以查看是否真的使用了预期的搜索字符串。

答案 1 :(得分:0)

我假设您使用msql_query来获取结果对象,在这种情况下,您可以使用mysql_num_rows来获取结果中的行数。

http://php.net/manual/en/function.mysql-query.php

答案 2 :(得分:0)

不确定这是否有助于您查明查询是否返回任何行。 但这就是我这样做的方式:

$ strSQL =“SELECT id”; $ strSQL。=“FROM gallery_groups”; $ strSQL。=“WHERE LOWER(name)LIKE'%$ searchstring%'或”; $ strSQL。=“LOWER(date_created)LIKE'%$ searchstring%'”;

$ rec = mysql_query($ strSQL,$ oConn);

if(mysql_num_rows($ rec)> 0){     $ strName = mysql_result($ rec,0,“name”);     $ strDateCreated = mysql_result($ rec,0,“date_created”); }