我有一个名为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
。