Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/5.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“Like”导致内容重复_Php_.htaccess_Mysql - Fatal编程技术网

Php SQL“Like”导致内容重复

Php SQL“Like”导致内容重复,php,.htaccess,mysql,Php,.htaccess,Mysql,我使用MySQL和“like”查询来查找页面。我需要能够这样做,但这意味着这些页面将是相同的: www.mysite.com/blog/hello-world www.mysite.com/blog/hello-worl 他们两个都在工作,并且会出现相同的页面。如何使用.htaccess?我能回避这个问题吗\ 非常感谢 编辑: PHP- 你能提供一个你需要这样做的理由吗 您是否需要hello-world和hello-world123匹配,但不需要hello-worl 否则,我想不出任何理由,您希

我使用MySQL和“like”查询来查找页面。我需要能够这样做,但这意味着这些页面将是相同的:

www.mysite.com/blog/hello-world

www.mysite.com/blog/hello-worl

他们两个都在工作,并且会出现相同的页面。如何使用.htaccess?我能回避这个问题吗\

非常感谢

编辑:

PHP-


你能提供一个你需要这样做的理由吗

您是否需要hello-world和hello-world123匹配,但不需要hello-worl

否则,我想不出任何理由,您希望使用LIKE,但不希望允许hello World匹配。

为什么不替换此:

$postmatch = "select * from blog where title LIKE '%".$title_two."%' LIMIT 1;";
…用这个

$postmatch = "select * from blog where title LIKE '$title_two' LIMIT 1;";

这样,您仍在搜索,而不考虑大小写,但不匹配周围的字符。

那么您就有了URL:www.mysite.com/blog/hello-world,其中hello-world是搜索字符串

我建议您将它们存储到数组中,如

$keyWrd = array();
$keyWrd = strtolower($_GET['keywd']); // MUST DO VALIDATION
$keyWrd = explode(" ",$keyWrd);
$TotalKeyVal = count($keyWrd);

if(!empty($keyWrd[0]))
    {
        $SrcQryStr = "SELECT id,title,body FROM tbl_name WHERE";
        for($i=0;$i<$TotalKeyVal;$i++)
            {
                $SrcQryStr .= " title LIKE '%";
                $SrcQryStr .= $keyWrd[$i];
                $SrcQryStr .= "%'";

                $SrcQryStr .= ' OR ';

                $SrcQryStr .= " body LIKE '%";
                $SrcQryStr .= $keyWrd[$i];
                $SrcQryStr .= "%'";

                if(($TotalKeyVal-1)!=$i) $SrcQryStr .= ' OR ';
            }
        $SrcQryStr .= " ORDER by created_date DESC";
现在您有了$SrcQryStr查询字符串,您可以对if!空$keyWrd[0]&&MORE在这里您可以使用内爆或多重内爆而不是for循环

现在为什么%.$keywd.%

例如:

字符串:欢迎使用堆栈溢出

搜索关键字:ack

它将显示找到的匹配项,因为在堆栈上找到ack,而%.$keywd.%

它不会显示找到的匹配项,因为$keywd时没有以ack开头的单词。%


它不会显示找到的匹配项,因为没有确切的单词ack,$keywd

,因为为了从数据库中获取更多信息,我只有用于搜索数据库的页面标题。所以我需要先得到页面的标题,然后找到它对应的页面。。。我正在使用$_GET['title'],从那里我想找到ID。好吧,但是如果URL中不可能存在ID,为什么您希望“hello world”和“hello-world123”匹配,而不是“hello worl”。是什么让他们与众不同?如果它是整个标题,那么为什么要使用LIKE呢?谢谢,唯一的问题是$title\u two的一些结尾会有一个问号或其他东西:\。。。然后它们就不会与数据库中的字段匹配
$keyWrd = array();
$keyWrd = strtolower($_GET['keywd']); // MUST DO VALIDATION
$keyWrd = explode(" ",$keyWrd);
$TotalKeyVal = count($keyWrd);

if(!empty($keyWrd[0]))
    {
        $SrcQryStr = "SELECT id,title,body FROM tbl_name WHERE";
        for($i=0;$i<$TotalKeyVal;$i++)
            {
                $SrcQryStr .= " title LIKE '%";
                $SrcQryStr .= $keyWrd[$i];
                $SrcQryStr .= "%'";

                $SrcQryStr .= ' OR ';

                $SrcQryStr .= " body LIKE '%";
                $SrcQryStr .= $keyWrd[$i];
                $SrcQryStr .= "%'";

                if(($TotalKeyVal-1)!=$i) $SrcQryStr .= ' OR ';
            }
        $SrcQryStr .= " ORDER by created_date DESC";