簡體   English   中英

mysqli 語句不顯示 else 沒有結果

[英]mysqli statement not displaying else for no result

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

這是代碼,我要討論的是if($result) {

    $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";
        }
    }

如果SELECT操作成功,則mysqli_query()將始終返回一個對象。 無論這個對象擁有 0 條還是更多條記錄,它都將始終為真。 您應該做的是從結果中獲取所有記錄。

mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
$con = new mysqli("localhost", "user", "pass", "db");
$con->set_charset('utf8mb4'); // always set the charset

$result = $con->query("SELECT * FROM vacancies WHERE status ='0'");
$data = $result->fetch_all(MYSQLI_BOTH);

if ($data) {
    foreach ($data as $row) {
        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";
}

要實現無結果,您需要使用mysqli_num_rows()檢查通過查詢獲取的行數。

在您的情況下,您檢查了 $result 變量,這將存儲查詢執行的狀態,因此它始終為真,因為即使查詢不返回任何行,它也將始終執行。

讓它更自然的方式

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

現在您可以像使用 $result 一樣使用$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(!$data): ?>
        There are currently no vacancies available
<? endif ?>

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);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM