Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/246.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP搜索表,然后显示多个结果_Php_Search - Fatal编程技术网

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