PHP搜索表然后显示多个结果

时间:2013-12-21 06:39:58

标签: php search

我正在尝试创建搜索,无论如何我的网站是:

mysite.com/?p=search&t=[SEARCH VARIABLE]

所以在我的情况下,如果我的网址是我希望它在我的帖子表中搜索并向我提供表格中存在[SEARCH VARIABLE]的结果。主要是我想要检查这些列:标题,内容和作者。如果那里有任何[搜索变量],我希望它出现。

尝试[只有1列]但没有给我所有结果。

<?php
if (isset($_GET['t']))
{
    $stmt = $dbh->prepare('SELECT * FROM posts WHERE `title` like :t');
    echo ' <h1>Search results for: '.$_GET['t'].'</h1> ';
    if (!$stmt->execute(array(':t' => $_GET['t'])))
    {
        exit('Could not exec query with param: '.$_GET['t']);
    }

    while($row = $stmt->fetch(PDO::FETCH_ASSOC))
    {
        echo '<font size="4pt">'.$row["title"].'</font><br>';
    }
}
?>

我的尝试与第一次尝试相同,但检查内容字段。也不起作用。

<?php
if (isset($_GET['t']))
{
    $stmt = $dbh->prepare('SELECT * FROM posts WHERE `title` like :t AND `content` like :t;');
    echo ' <h1>Search results for: '.$_GET['t'].'</h1> ';

    if (!$stmt->execute(array(':t' => $_GET['t'])))
    {
        exit('Could not exec query with param: '.$_GET['t']);
    }

    while($row = $stmt->fetch(PDO::FETCH_ASSOC))
    {
        echo '<font size="4pt">'.$row["title"].'</font><br>
    }
}
?>

对于第一个,它只显示一个带有标题的字段。但是我希望它能用它来表达任何内容。例如,如果你搜索“嘿”并且有“嘿theres apples”,我希望它显示嘿theres apples。

编辑:

<?php 
if (isset($_GET['t']))
{
    $stmt = $dbh->prepare('SELECT * FROM posts WHERE `title` like %:t%');

    echo ' <h1>Search results for: '.$_GET['t'].'</h1> ';

    while($row = $stmt->fetch(PDO::FETCH_ASSOC))
    {
        echo '<font size="4pt">'.$row["title"].'</font><br>';
    }
}
?>

仍然需要帮助。

2 个答案:

答案 0 :(得分:0)

绑定参数时需要应用通配符%,而不是查询中。请尝试以下(针对第一个代码段):

<?php
if (isset($_GET['t']))
{
    $stmt = $dbh->prepare('SELECT * FROM posts WHERE `title` like :t');
    echo ' <h1>Search results for: '.$_GET['t'].'</h1> ';
    if (!$stmt->execute(array(':t' => "%{$_GET['t']}%"))) // <---------- Added % here
    {
        exit('Could not exec query with param: '.$_GET['t']);
    }

    ...
}
?>

更新(对于具有相同值的or条件):

您不能在同一查询中两次使用相同的命名参数。请尝试以下方法:

<?php
if (isset($_GET['t']))
{
    $stmt = $dbh->prepare('SELECT * FROM posts WHERE `title` like :t or content like :content');
    echo ' <h1>Search results for: '.$_GET['t'].'</h1> ';

    $param_array = array(':t' => "%{$_GET['t']}%", ':content' => "%{$_GET['t']}%")
    if (!$stmt->execute($param_array))
    {
        exit('Could not exec query with param: '.$_GET['t']);
    }

    ...
}
?>

答案 1 :(得分:0)

使用LIKE子句时:

  • 必须引用
  • 您应该正确使用%

一个例子:

SELECT * FROM `posts` WHERE `title` LIKE '%:t%' -- :t appears anywhere in title
SELECT * FROM `posts` WHERE `title` LIKE ':t%'  -- :t is at beginning of title
SELECT * FROM `posts` WHERE `title` LIKE '%:t'  -- :t is at the end of title