2013-10-05 30 views
0

下面是一個非常基本的搜索功能腳本。使用if/else語句無法正常工作的PDO select查詢

它工作得很好,從結果確實獲取時應該得到,但的問題是,當查詢應返回零結果,<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 
     } 
} 
?> 

我在這裏錯過了什麼?

回答

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

如果沒有結果,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 
} 
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塊和一個小更易於閱讀。