Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/283.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何进行良好的SQL搜索?_Php_Sql_Mysql_Search - Fatal编程技术网

Php 如何进行良好的SQL搜索?

Php 如何进行良好的SQL搜索?,php,sql,mysql,search,Php,Sql,Mysql,Search,我有一个搜索字段,使用这个单一的文本框,我希望用户能够找到他们的名字画廊和图像。我遇到的问题是,我似乎无法在我的查询中获得任何结果,即使语法很好,也没有错误 下面是一个场景:我的组名是“litengruppe!”,搜索字符串是“Liten”。对于不区分大小写的搜索,搜索字符串和结果字符串都切换为小写 语法中的某些东西一定在做我不期望的事情 SELECT `id` FROM gallery_groups WHERE `name` LIKE LOWER('%$searchstring%') OR

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

下面是一个场景:我的组名是“litengruppe!”,搜索字符串是“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

如果结果中的所有字段都为空,我怎么可能知道除了运行fetch_object(),是否还有其他结果?

您可以在MYSQL中执行不区分大小写的搜索,而不使用
LOWER

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

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

我假设您正在使用
msql\u query
获取结果对象,在这种情况下,您可以使用
mysql\u num\u rows
获取结果中的行数


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

$strSQL=“选择
id
”; $strSQL.=“来自图库组”; $strSQL.=“其中较低(
名称
)的位置,如“%$searchstring%”或“; $strSQL.=“较低(
date_created
)如“%$searchstring%””

$rec=mysql\u查询($strSQL,$oConn)

如果(mysql_num_rows($rec)>0){ $strName=mysql_结果($rec,0,“name”); $strDateCreated=mysql_结果($rec,0,“创建日期”);
}

您确定您的搜索字符串被插入到查询中了吗?您是否尝试打印出代码生成的查询,并直接在PHP之外的数据库中运行它?这通常会发现容易发现的错误。@Sarah Happy:是的,我已经做到了@丹·格罗斯曼:我没有那样做。让我试试看,很有趣!将结果查询直接复制到PhpMyAdmin中会导致匹配。然而,当从PHP调用时,它不会产生任何行。这怎么可能?这意味着你的代码错了。您认为不需要提供代码来获得答案,但您确实需要;)那么我将如何执行区分大小写的搜索?另外,将字符编码更改为UTF8不会损坏我的字符吗?(即Æ、Ø、Å)不要混淆字符集(编码)和排序规则。排序规则只是定义顺序(哪些字符排在其他字符之前,哪些字符被认为是相等的)。要执行区分大小写的搜索,请使用区分大小写的排序规则。MySQL支持30多个字符集的70多个排序规则。