如果数组未返回任何结果,则显示无结果消息


if array returns no results, display no results message

我有一个名为ShowRecords($sql)的函数,在函数中我有以下代码:

function ShowRecords($sql) {
    $rs=mysql_query($sql,$conn);
    while($result = mysql_fetch_array($rs)) {
        $results[] = $result;
    }
    return array("results" => $results, "PageNavi" => $table_display);
}

我有很多页面,每个页面上都有这个foreach循环:

$array = ShowRecords($sql);
foreach($array["results"] as $porting) {
    //display results
    echo $porting["sequence"];
}

(在函数中)显示一条消息以表示如果未返回任何结果的最佳方法是什么?我尝试使用mysql_num_rows但foreach循环显示错误,指出无效参数

有没有办法我仍然可以返回$results数组以包含每个数组项

例如,当我尝试$results[] = '';如果没有返回行时,我仍然收到一条错误消息:

Warning: Illegal string offset 'sequence' because `$results["sequence"]` does not exist

这只是一个快速表示,但您应该对页面本身进行一些检查,而不仅仅是在函数中。 您只能通过执行以下操作在页面本身上执行此操作:

$array = ShowRecords($sql);
if (is_array($array['results'])) {
    foreach($array["results"] as $porting) {
        //display table and results here...
    }
}

这就是我会这样做的。 如果没有结果,我会让函数返回 false 或抛出异常。

$rs=mysql_query($sql,$conn);
if (!$rs or !mysql_num_rows($rs)) {
    return false;
}
while($result = mysql_fetch_array($rs)) {
    $results[] = $result;
}
return array("results" => $results, "PageNavi" => $table_display);

然后我会检查以确保$array在执行 foreach 循环之前不是假的。

if ($array = ShowRecords($sql)) {
    foreach($array["results"] as $porting) {
        //display table and results here...
    }
}
else {
    echo "No results!";
}

只需检查是否有结果即可进入while循环,这意味着如果至少一行有结果,否则没有结果:

if( mysql_num_rows($rs) > 0 ) {
    while($result = mysql_fetch_array($rs)) {
        $results[] = $result;
    }
} else {
    return array("results" => "No results");
}

这样,当没有结果时,每个页面上的查询foreach将只有一个带有文本"No results"的项目。

请注意,mysql已折旧,您可能应该改用mysqli