Результат возвратил меньше 1 (минус 1) из точной строки, доступной в базе данных - PullRequest
0 голосов
/ 22 июня 2011
<?php

include 'db.php';

$subassetcategory = $_GET["subassetcategory"];

if ($subassetcategory == "all") {
    $sql = "SELECT * FROM asset_subasset";
}
else {
    $sql = "SELECT * FROM asset_subasset WHERE subassetcategory = '" . $subassetcategory . "'";
}

$result = mysql_query($sql) or die(mysql_error());

if ($row = mysql_fetch_array($result)) {

    echo "<table border='1'>
            <tr>
            <th>Asset ID</th>
            <th>Subasset Category</th>
            <th>Subasset Name</th>
            </tr>";

    while ($row = mysql_fetch_array($result)) {
        $subassetid = $row['subassetid'];
        $assetid = $row['assetid'];
        $subassetname = $row['subassetname'];
        $subassetcategory = $row['subassetcategory'];

        echo "<tr>";
        echo "<td>" . $assetid . "</td>";
        echo "<td>" . $subassetcategory . "</td>";
        echo "<td>" . $subassetname . "</td>";
        echo "<td>" . "<a href='viewassetdetail.php?subassetid=$subassetid&assetid=$assetid'>View<a/>" . "</td>";
        echo "</tr>";
    }
    echo "</table>";
}
else {
    echo "<br> No data found </br>";
}

mysql_close($connect);

?>

Пожалуйста, помогите мне, я не мог понять, почему этот код не может вернуть результат должным образом. Он вернул меньше 1 строки (если результат предполагает, что у него 2 строки, он вернет только 1) из точных строк, доступных в базе данных.

if ($row = mysql_fetch_array($result)) {

    echo "<table border='1'>
            <tr>
            <th>Asset ID</th>
            <th>Subasset Category</th>
            <th>Subasset Name</th>
            </tr>";

    while ($row = mysql_fetch_array($result)) {
        $subassetid = $row['subassetid'];
        $assetid = $row['assetid'];
        $subassetname = $row['subassetname'];
        $subassetcategory = $row['subassetcategory'];

        echo "<tr>";
        echo "<td>" . $assetid . "</td>";
        echo "<td>" . $subassetcategory . "</td>";
        echo "<td>" . $subassetname . "</td>";
        echo "<td>" . "<a href='viewassetdetail.php?subassetid=$subassetid&assetid=$assetid'>View<a/>" . "</td>";
        echo "</tr>";
    }
    echo "</table>";
}
else {
    echo "<br> No data found </br>";
}

mysql_close($connect);

?>

если я только что написал этот код, он отлично работает.

$result = mysql_query($sql) or die(mysql_error());

echo "<table border='1'>
    <tr>
    <th>Asset ID</th>
    <th>Subasset Category</th>
    <th>Subasset Name</th>
    </tr>";

while ($row = mysql_fetch_array($result)) {
    $subassetid = $row['subassetid'];
    $assetid = $row['assetid'];
    $subassetname = $row['subassetname'];
    $subassetcategory = $row['subassetcategory'];

    echo "<tr>";
    echo "<td>" . $assetid . "</td>";
    echo "<td>" . $subassetcategory . "</td>";
    echo "<td>" . $subassetname . "</td>";
    echo "<td>" . "<a href='viewassetdetail.php?subassetid=$subassetid&assetid=$assetid'>View<a/>" . "</td>";
    echo "</tr>";
}
echo "</table>";

mysql_close($connect);

?>

Но я хочу, чтобы он показывал «Данные не найдены», если результат был пустым. Итак, любая помощь? Я знаю, что это очень просто, но я не мог найти ответ уже несколько дней. Заранее спасибо!

Ответы [ 5 ]

2 голосов
/ 22 июня 2011

Вы фактически отбираете первый результат в своем операторе if:

if ($row = mysql_fetch_array($result))

Просто проверьте количество возвращаемых строк, чтобы сохранить набор результатов без изменений:

if(mysql_num_rows($result) > 0)
0 голосов
/ 22 июня 2011

вместо

if ($row = mysql_fetch_array($result))
{
  .....................
}

попробуйте использовать это:

 $num_rows = mysql_num_rows($result); //returns the number of rows selected

 if($num_rows==0)
 {
      //no data
 }
 else
 {
    //your code
 }
0 голосов
/ 22 июня 2011

Немного более упорядоченным способом было бы проверить набор результатов, прежде чем вы даже попадете в цикл массива.Таким образом, вы можете пропустить все это, если оно пустое, и сразу перейти к пустому диалогу.

0 голосов
/ 22 июня 2011
If ($result->num_rows() > 0 ) { do your stuff } else { no results found }
0 голосов
/ 22 июня 2011

Вы должны использовать mysql_fetch_array(), чтобы проверить, есть ли результат.Вы уже съели один ряд там.Итак, вот где ваша единственная пропущенная строка.Вы можете проверить, есть ли какое-либо значение в результате, используя mysql_num_rows()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...