PHP 搜索获取字段中存在数据的位置

标签 php mysql 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>
                            ';
        }
    }
  ?>

对于第一个,它只显示一个带有标题的字段。但我希望它能显示任何带有这个词的东西。例如,如果您搜索“嘿”并找到“嘿那里有苹果”,我希望它显示嘿那里有苹果。

编辑:

<?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>
                        ';

                            }
                            }

                    ?>

仍然需要帮助。

最佳答案

问题是您没有在搜索词周围放置 LIKE 通配符 (%)。如果没有通配符,查询将在参数中查找字面术语,这并不是您真正想要使用 LIKE 的目的。

所以这样的声明:

$stmt->execute(array(':t' => $_GET['t'])

应该是这样的:

$stmt->execute(array(':t' => '"%'.$_GET['t'].'%"')

编辑也许这样做会更好。将您的代码保留为原始问题,忽略上面的更改并调整您的语句,如下所示:

    $stmt = $dbh->prepare('SELECT * FROM posts WHERE `title` like %:t%');

另外,对于您的组合语句进行类似的更改,并且可能将 AND 更改为 OR:

    $stmt = $dbh->prepare('SELECT * FROM posts WHERE `title` like %:t% OR `content` like %:t%;');

但不知何故,您需要这些通配符才能获得问题所暗示的结果。

关于PHP 搜索获取字段中存在数据的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20714819/

相关文章:

php - 如何从 CodeIgniter 中的目录文件夹中删除上传的图像

php - $$(双美元)在 mysql 上下文中有何用途?

php - 登录 WordPress 后重定向

mysql - 如何在 MySQL 单元格中存储一组/数组的唯一数字

php - 从 MySQL 查询创建一个数组,对该数组的值求平均值,然后将该平均值向上取整

php - 预期响应代码 250 但得到代码 "535",消息“535-5.7.8 用户名和密码不被接受

mysql - 将 mysql 查询转换为与 laravel 一起使用

search - Docker 注册表 2.0 API v2

MySQL:使用 LIKE 或 FULLTEXT 优化搜索

algorithm - 按字符串相似性对搜索结果进行分组的最有效方法