使用if / else语句的PDO select查询无法正常工作

时间:2013-10-05 01:53:54

标签: php if-statement pdo

以下是一个非常基本的搜索功能的脚本。

它运行良好,从某种意义上说,只要应该得到结果,但问题是当查询返回零结果时,<div id="bar">No results!</div>不显示。相反,页面是空白的。

$search_query = $_GET['search'];
$search_query  = htmlentities($search_query);
$word = "%$search_query%"; 

$search=$sth->con->prepare("SELECT id, firstname, lastname FROM users WHERE
firstname LIKE ? OR
lastname LIKE ?");

$search->bindValue(1, $word, PDO::PARAM_STR);       
$search->bindValue(2, $word, PDO::PARAM_STR);   
$search->execute();

    $results = $search->fetchAll();

foreach ($results as $row) {
$firstname = $row["firstname"];
$lastname = $row["lastname"];

       if (!(count($results) == 0)) {  
?>

       <div id="foo">Here are your results</div>
<?php
        } else {

       <div id="bar">No results!</div>
<?php
        }
}
?>

我在这里缺少什么?

3 个答案:

答案 0 :(得分:2)

如果没有结果,foreach将永远不会进入正文。您需要将if放在foreach

周围
if (count($results) != 0) {
    ?> <div id="foo">Here are your results</div>
    <?php
    foreach ($results as $row) {
        ...
    }
} else {
    ?> <div id="bar"> No results!</div>
    <?php
}

答案 1 :(得分:2)

您的count位置错误。如果没有结果,则foreach循环内容永远不会触发。

你想要这样的东西:

<?php
if (count($results)) {
    echo '<div id="foo">Here are the results</div>';
    foreach ($results as $row) {
        // do stuff with row
    }
} else {
    echo '<div id="bar">No Results!</div>';
}

或者,因为非空数组是“truthy”:

<?php
if ($results) {
    echo '<div id="foo">Here are the results</div>';
    foreach ($results as $row) {
        // do stuff with row
    }
} else {
    echo '<div id="bar">No Results!</div>';
}

答案 2 :(得分:2)

foreach循环放在第一个if块中。如果没有返回任何行,则foreach无需迭代。

if (count($results))
{  

    foreach ($results as $row)
    {
        $firstname = $row["firstname"];
        $lastname = $row["lastname"];

        echo '<div id="foo">Here are your results</div>';
    }
}
else
{
    echo '<div id="bar">No results!</div>';
}

修改 我略微修改了你的代码,因此它不会进出php块而且更容易阅读。