我有一个名为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
答案 0 :(得分:1)
只是检查是否有结果才能进入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
。
答案 1 :(得分:1)
这只是一个快速表示,但您应该对页面本身进行一些检查,而不仅仅是在函数中。您只能在页面上执行此操作:
$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);
然后我会检查以确保在执行foreach循环之前$array
不是假的。
if ($array = ShowRecords($sql)) {
foreach($array["results"] as $porting) {
//display table and results here...
}
}
else {
echo "No results!";
}