PHP搜索函数无法返回结果

PHP搜索函数无法返回结果,php,mysql,pdo,Php,Mysql,Pdo,我正在重构一个PHP脚本(从mysqli迁移到PDO)。它的目的是为网站创建一个资源列表,并允许用户对其进行筛选。还有一个基本的搜索功能。除了搜索功能外,重构脚本中的所有内容都工作正常。尝试搜索不会返回任何结果。这些信息存在于数据库中,我在Apache日志中找不到任何错误。代码如下: require_once('web_misc_config'); ... $search=(isset($_GET['search']) ? $_GET['search'] : null); $sear

我正在重构一个PHP脚本(从mysqli迁移到PDO)。它的目的是为网站创建一个资源列表,并允许用户对其进行筛选。还有一个基本的搜索功能。除了搜索功能外,重构脚本中的所有内容都工作正常。尝试搜索不会返回任何结果。这些信息存在于数据库中,我在Apache日志中找不到任何错误。代码如下:

require_once('web_misc_config');

...    

$search=(isset($_GET['search']) ? $_GET['search'] : null);
$search= addslashes($search); 
$searchletter=(isset($_GET['searchletter']) ? $_GET['searchletter'] : null);

//This while loop creates the searched version of the A to Z list.
if (!empty($search)){
    $result = $con->prepare("SELECT title,summary,url,coverage,format FROM 

    dbs where title like :search or summary like :search");
    $result->bindParam(':search', $search, PDO::PARAM_STR);
    $result->execute();

    while($row = $result->fetch())
    {
        $url=$row['url'];
        $title=$row['title'];
        $summary=$row['summary'];
        $coverage=$row['coverage'];
        $format=$row['format'];

        echo ('<p><h6><a href="' . $url . '">' . $title . '</a></h6>
                        <br />' . $summary . '</p>');
    } 
}

//This block creates the filtered and searched version of the list.
elseif (!empty($searchletter)) {
    $result = $con->prepare("SELECT title,summary,url,coverage,format,fletter FROM dbs where fletter = :searchletter");
    $result->bindParam(':searchletter', $searchletter);
    $result->execute();

    while($row = $result->fetch())
    {
        $url=$row['url'];
        $title=$row['title'];
        $summary=$row['summary'];
        $coverage=$row['coverage'];
        $format=$row['format'];

        echo ('<p><h6><a href="' . $url . '">' . $title . '</a></h6>
                        <br />' . $summary . '</p>');
    }
}  

//This block loop creates the inital A to Z list.
else {
    $result = $con->prepare("SELECT title,summary,url,coverage,format FROM dbs");
    $result->execute();

    while($row = $result->fetch())
    {
        $url=$row['url'];
        $title=$row['title'];
        $summary=$row['summary'];
        $coverage=$row['coverage'];
        $format=$row['format'];

        echo ('<p><h6><a href="' . $url . '">' . $title . '</a></h6>
                        <br /> ' . $summary . '</p>');
    } 
}   
$result = null;
$con = null;
require_once('web_misc_config');
...    
$search=(isset($\u GET['search'])?$\u GET['search']:null);
$search=addslashes($search);
$searchletter=(isset($\u GET['searchletter'])?$\u GET['searchletter']:null);
//这个while循环创建A到Z列表的搜索版本。
如果(!空($search)){
$result=$con->prepare(“从中选择标题、摘要、url、覆盖范围、格式
dbs,其中标题如:搜索或摘要如:搜索”);
$result->bindParam(':search',$search,PDO::PARAM_STR);
$result->execute();
而($row=$result->fetch())
{
$url=$row['url'];
$title=$row['title'];
$summary=$row['summary'];
$coverage=$row['coverage'];
$format=$row['format'];
回声('

。$summary.

); } } //此块创建列表的筛选和搜索版本。 elseif(!空($searchletter)){ $result=$con->prepare(“从dbs中选择标题、摘要、url、覆盖范围、格式、fletter,其中fletter=:searchletter”); $result->bindParam(':searchletter',$searchletter); $result->execute(); 而($row=$result->fetch()) { $url=$row['url']; $title=$row['title']; $summary=$row['summary']; $coverage=$row['coverage']; $format=$row['format']; 回声('
。$summary.

); } } //此块循环创建初始A到Z列表。 否则{ $result=$con->prepare(“从dbs中选择标题、摘要、url、覆盖范围、格式”); $result->execute(); 而($row=$result->fetch()) { $url=$row['url']; $title=$row['title']; $summary=$row['summary']; $coverage=$row['coverage']; $format=$row['format']; 回声('
。$summary.

); } } $result=null; $con=null;

ELSEIF和ELSE模块工作正常。将填充初始的未筛选列表,用户可以按字母顺序对其进行筛选。为了完整性和比较,这里包含了它们。问题在于IF块中的while循环(在第一条注释下)。它的计算结果为false,导致出现一个空白屏幕而不是搜索结果。只要从数据库检索到结果,它的计算结果就应该为true。有人能看到我可能遗漏的内容吗?

由于
$search
不包含任何通配符,因此
LIKE
将被视为
=
并查找精确匹配。如果要在列中的任何位置搜索它,则需要添加通配符

if (!empty($search)){
    $search = "%$search%";
    $result = $con->prepare("SELECT title,summary,url,coverage,format 
        FROM dbs 
        where title like :search or summary like :search");
    $result->bindValue(':search', $search, PDO::PARAM_STR);
    $result->execute();

当使用像这样的
时,您可能希望在绑定中使用
%
。看看这是否有助于获取一些行。下面是答案:当你使用预先准备好的语句时,你不应该使用
addslashes()
。这可能是重复的。我知道这一定很简单。我还按照你的建议删除了addslashes。