Php 如何获取通过搜索查询找到的记录数?

Php 如何获取通过搜索查询找到的记录数?,php,mysql,pdo,Php,Mysql,Pdo,我正在为我的网站创建一个搜索引擎,我想添加找到的搜索结果的数量,我寻找了这样做的功能,但我发现的所有功能都不在PDO中。所以我决定运行两次查询,但我不确定这是否可行。有没有更好的方法来计算PDO中的结果?否则,运行同一查询两次是否安全?谢谢大家! <?php if(isset($_GET['tab'])) { if($_GET['tab'] == 'all') { $query

我正在为我的网站创建一个搜索引擎,我想添加找到的搜索结果的数量,我寻找了这样做的功能,但我发现的所有功能都不在PDO中。所以我决定运行两次查询,但我不确定这是否可行。有没有更好的方法来计算PDO中的结果?否则,运行同一查询两次是否安全?谢谢大家!

<?php
        if(isset($_GET['tab']))
        {
            if($_GET['tab'] == 'all')
            {
                $query = $db->query('SELECT * FROM search WHERE title LIKE \'%'.$_GET['searchquery'].'%\' OR details LIKE \'%'.$_GET['searchquery'].'%\' OR link LIKE \'%'.$_GET['searchquery'].'%\' LIMIT 20');
            }
            else if($_GET['tab'] == 'products')
            {
                $query = $db->query('SELECT * FROM search WHERE  (type = \'products\') AND (title LIKE \'%'.$_GET['searchquery'].'%\' OR details LIKE \'%'.$_GET['searchquery'].'%\' OR link LIKE \'%'.$_GET['searchquery'].'%\') LIMIT 20');
            }
            else if($_GET['tab'] == 'blogpost')
            {
                $query = $db->query('SELECT * FROM search WHERE (type = \'blogpost\') AND (title LIKE \'%'.$_GET['searchquery'].'%\' OR details LIKE \'%'.$_GET['searchquery'].'%\' OR link LIKE \'%'.$_GET['searchquery'].'%\') LIMIT 20');
            }
            else if($_GET['tab'] == 'forumthread')
            {
                $query = $db->query('SELECT * FROM search WHERE (type = \'forumthread\') AND (title LIKE \'%'.$_GET['searchquery'].'%\' OR details LIKE \'%'.$_GET['searchquery'].'%\' OR link LIKE \'%'.$_GET['searchquery'].'%\') LIMIT 20');
            }
    ?>

        <div id="resultsconainter">
            <div id="tabsconatiner">

            </div>
        <?php
            else
            {
                echo '<p>Sorry, this section is not available!</p>';
            }
                if(isset($query))
                {
                    for($i=0; $i<100;  $i++)
                    {
                        if($result = $query->fetch())
                        {
                            $_GET['searchquery'] = rawurlencode($_GET['searchquery']);
                            $result = preg_replace("#\\b(" . $_GET['searchquery'] . ")\\b#i", "<b>$1</b>", $result);
                            echo '<div class="result">
                            <a class="title" href="/qsoft/'.$result['link'].'">'.$result['title'].'</a>
                            <span class="link">
                                <span class="beforelink" style="font-size:1.1em;font-size:1.3vw;position:relative;top:1px;padding-right:1px;">&#8227;</span>
                                localhost/QSoft/'.$result['link'].'
                            </span>
                            <span class="details">'.$result['details'].'</span>
                            </div>';
                        }
                        else
                        {
                            if($i==0)
                            {
                                echo '<p>Sorry, no resluts found here for : &nbsp;<b>'.$_GET['searchquery'].'</b></p>';
                            }
                        }
                    }
                }
            }
            else
            {
                echo'<p>Missing tab informations, please retry</p>';
            }
        }
    ?>

假设您使用这样的东西
$result=$sth->fetchAll()
要从查询中获取所有记录,可以执行
count($result)
以返回记录数。因此不需要1个查询。


为了获得更准确的答案,最好向我们提供部分代码,以便我们能够为您提供帮助。

是的,对于搜索引擎,您应该运行两个查询:

  • 一个是获取实际搜索结果。请注意,您应该始终使用limit运算符限制SQL查询中的选定行数
  • 一个用于获取与搜索条件匹配的行数此查询不应返回实际行,只返回一个数字
然而,对于mysql,您可以使用一个技巧

对于第一个查询,在
SELECT
之后添加
SQL\u CALC\u FOUND\u ROWS
关键字:

$query = $db->query('SELECT SQL_CALC_FOUND_ROWS * FROM search ... LIMIT 20');
而对于第二个问题,只需运行以下简单代码

$count = $db->query("SELECT FOUND_ROWS()")->fetchColumn();

好的,这就是我所做的,我认为它不是很干净,但它可以工作:

if(isset($query))
                {
                    $didgetcount = false;
                    for($i=0; $i<100; $i++)
                    {
                        if($result = $query->fetch())
                        {
                            $_GET['searchquery'] = rawurlencode($_GET['searchquery']);
                            $result = preg_replace("#\\b(" . $_GET['searchquery'] . ")\\b#i", "<b>$1</b>", $result);
                            echo '<div class="result">
                            <a class="title" href="/qsoft/'.$result['link'].'">'.$result['title'].'</a>
                            <span class="link">
                                <span class="beforelink" style="font-size:1.1em;font-size:1.3vw;position:relative;top:1px;padding-right:1px;">&#8227;</span>
                                localhost/QSoft/'.$result['link'].'
                            </span>
                            <span class="details">'.$result['details'].'</span>
                            </div>';
                        }
                        else
                        {
                            if($i==0)
                            {
                                echo '<p>Sorry, no resluts found here for : &nbsp;<b>'.$_GET['searchquery'].'</b></p>';
                                echo '<script> document.getElementById("resultsnumber").innerText = 0;</script>';
                                $didgetcount = true;
                            }
                            else
                            {
                                if($didgetcount == false)
                                {
                                    echo '<script>
                                                function writeresults(n)
                                                {
                                                    document.getElementById("resultsnumber").innerText = n;
                                                }
                                                writeresults('.$i.');
                                          </script>';
                                    $didgetcount = true;
                                }
                            }
                        }
                    }
                }
            }
            else
            {
                echo'<p>Missing tab informations, please retry</p>';
            }
if(isset($query))
{
$didgetcount=false;
对于($i=0;$ifetch())
{
$\u GET['searchquery']=rawurlencode($\u GET['searchquery']);
$result=preg#u replace(“..$\u GET['searchquery']”,\\b#i“,“$1”,$result);
回声'
‣
localhost/QSoft/'.$result['link'].'
“.$result['details']”
';
}
其他的
{
如果($i==0)
{
echo'对不起,在此处找不到针对:'的reslut。$\u GET['searchquery'.

'; echo“document.getElementById(“resultsnumber”).innerText=0;”; $didgetcount=true; } 其他的 { 如果($didgetcount==false) { 回声' 函数writeresults(n) { document.getElementById(“结果编号”).innerText=n; } 书面结果(‘.$i’); '; $didgetcount=true; } } } } } } 其他的 { 回显“缺少选项卡信息,请重试”

; }
谢谢!我会试试的。等等,如果我这样做,结果编号会在显示结果之后,对吗?你可以在任何地方显示任何数据。结果之前、之后或相反你认为呢?有什么需要修理的吗?这对我来说很有效。