2014-04-04 35 views
0

我有一個聲明,非常基本,從數據庫拉入並顯示信息。有用。但是,如果我刪除數據庫中的條目,else語句應該說明沒有結果。但事實並非如此。任何人都可以看到問題嗎?mysqli語句不顯示其他沒有結果

這是代碼,我正在對位的是如果($結果){

$con=mysqli_connect("localhost","user","pass","db"); 
    // Check connection 
    if (mysqli_connect_errno()) { 
     echo "Failed to connect to MySQL: " . mysqli_connect_error(); 
    }else { 
     $result = mysqli_query($con,"SELECT * FROM vacancies WHERE status ='0'"); 

     if($result) { 

      while($row = mysqli_fetch_array($result)) { 
       echo "<li><a href=\"current_vacancy?id=".$row['id']. "\">". $row['title'] ."</a> <img src=\"rightarrow.png\" alt=\"next\"></li>"; 
      } 

     } else { 
     // execute for 0 rows returned. 
      echo "There are currently no vacancies available"; 
     } 
    } 

感謝

+0

什麼的var_dump($結果)顯示? – sunny

+0

爲什麼在第一行中有$結果。此外,它的匹配右大括號丟失。 – Vagabond

+0

對不起,如果在($結果){錯誤地加入到代碼時,它應該是在上面的文字。編輯 – MarkP

回答

1

爲了實現沒有結果,你需要檢查你取行數通過查詢mysqli_num_rows()

在您檢查$ result變量,這將存儲查詢執行的狀態你的情況,因此,它永遠是正確的,因爲查詢將始終運行,即使它不返回行。

+0

哦,是的,我錯過了。謝謝@Debflav –

0

mysqli_query返回的結果是一個對象,而不是行數。使用mysqli_num_rows($result)來獲得行數。

順便說一下,一定要在最後撥打mysqli_free_result($result)。建議概要:

$result = mysqli_query(…); 
if (!$result) { 
    # Handle failure 
} else { 
    if (mysqli_num_rows($result) == 0) { 
     # Handle no vacancies 
    } else { 
     # Normal case 
    } 
    mysqli_free_result($result); 
} 
+0

如果在年底之前呢? – MarkP

+0

查看修訂後的答案。 –

0

爲了使它更自然的方式

$data = []; 
$result = $con->query("SELECT * FROM vacancies WHERE status ='0'"); 
while($row = mysqli_fetch_array($result)) { 
    $data[] = $row; 
} 
?> 

,現在你可以使用$data的方式,你嘗試過使用$結果:

<?php foreach ($data as $row): ?> 
    <li> 
     <a href="current_vacancy?id=<?=$row['id']?>"> 
     <?=$row['title']?> 
     </a> 
     <img src="/images/rightarrow.png" alt="next"> 
    </li> 
<?php endforeach ?> 

<?php if(!$result): ?> 
     There are currently no vacancies available 
<? endif ?>