我正在尝试创建搜索,无论如何我的网站是:
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/