У меня есть утверждение, довольно базовое, которое извлекается из базы данных и отображает информацию. Оно работает. Однако, если я удалю запись в базе данных, оператор 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"; } }
благодаря
Чтобы не выполнить никакого результата, вам нужно проверить количество строк, которые вы mysqli_num_rows()
по запросу, с помощью mysqli_num_rows()
.
В вашем случае вы проверили переменную $ result, это сохранит статус выполнения запроса, поэтому оно всегда будет истинным, поскольку запрос всегда будет выполняться, даже если он не возвращает строк.
Чтобы сделать его более естественным
$data = []; $result = $con->query("SELECT * FROM vacancies WHERE status ='0'"); while($row = mysqli_fetch_array($result)) { $data[] = $row; } ?>
и теперь вы можете использовать $data
так, как вы пытались использовать $ result:
<?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 ?>
Результат, возвращаемый 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); }