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