PHP搜索表,然后显示多个结果
我正在尝试创建搜索,但我的网站是:PHP搜索表,然后显示多个结果,php,search,Php,Search,我正在尝试创建搜索,但我的网站是: mysite.com/?p=search&t=[SEARCH VARIABLE] 因此,在我的例子中,如果我的url是,我希望它搜索我的帖子表,并给出表中[search VARIABLE]存在的结果。我主要想让它检查这些栏目:标题、内容和作者。如果那里有[Search variable],我希望它显示出来 尝试[仅对1列]有效,但不会给出所有结果 <?php if (isset($_GET['t'])) { $stmt = $dbh-&
mysite.com/?p=search&t=[SEARCH VARIABLE]
因此,在我的例子中,如果我的url是,我希望它搜索我的帖子表,并给出表中[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>
}
}
?>
对于第一个字段,它只显示一个带有标题的字段。但我想让它显示任何有这个词的东西。例如,如果您搜索hey'并拥有hey theres Apple,我希望它显示hey theres Apple
编辑:
仍然需要帮助。在绑定参数时,而不是在查询中,需要应用通配符%。对于第一个代码段,请尝试以下操作:
<?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']);
}
...
}
?>
使用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
我怎样才能在其中添加内容呢?尝试将其更改为$stmt=$dbh->prepare'SELECT*FROM title`like:t或content like:t';`虽然它只拾取标题参数。@user3124460,但不能在同一查询中使用同一命名参数两次。为内容使用不同的名称,并为内容的参数指定相同的值。实际上,我在同一个查询中使用了它$stmt=$dbh->prepare'SELECT*从标题'like:t或内容'like:t'的帖子中选择`@用户3124460,谢谢你指出这一点。不久前我使用它时,它对我不起作用。可能是PHP版本。谢谢你的确认,我需要试一试是的,我还以为它也没用呢。我想是的。
<?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']);
}
...
}
?>
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